Мое приложение - своего рода карманный справочник с некоторыми данными за весь год. Я предполагаю, что пользователи будут использовать программу хотя бы один раз с доступом в Интернет для активации лицензии. По крайней мере, так я понимаю, как работает система лицензирования Android. Я использую ServerManagedPolicy.
Проверяет ли он периодически наличие лицензии? Как я могу это контролировать? Я не хочу, чтобы мои пользователи оказались в глуши, с уже активированным приложением и внезапно через 1 неделю, 1 месяц, 1 год и т. Д. приложение начинает ограничивать удобство использования самого приложения, потому что лицензию не удалось повторно подтвердить . Мое приложение будет использоваться в удаленных местах с нестабильным доступом к сети (не может считаться само собой разумеющимся все время) людьми, которые будут жить там неделями, а может и месяцами.
Я чувствую, что должен хотя бы предупредить их, что их будут просить делать это каждые X недель. Неужели система лицензирования даже такая драконовская?
Я знаю, что могу обрабатывать ошибки с помощью флага ERROR_CONTACTING_SERVER в applicationError, не имеющем значения LicenseCheckerCallback. Всегда ли ответ «VT» один и тот же (не могу проверить это на тестовой учетной записи / моей учетной записи)? Мне просто было любопытно, как вы, ребята, относитесь к этой ситуации в своих реальных приложениях. Я что-то упустил? Почему-то я чувствую, что да. Есть ли какой-нибудь "подвох"?
// ОТРЕДАКТИРОВАННЫЙ:
Вот код, который я пробую прямо сейчас:
// ServerManagedPolicy.java
private void setValidityTimestamp(String validityTimestamp) {
Long lValidityTimestamp;
try {
lValidityTimestamp = Long.parseLong(validityTimestamp);
} catch (NumberFormatException e) {
// No response or not parsable, expire in one minute.
Log.w(TAG, "License validity timestamp (VT) missing, caching for a minute");
lValidityTimestamp = System.currentTimeMillis() + MILLIS_PER_MINUTE;
validityTimestamp = Long.toString(lValidityTimestamp);
}
// added by me--->
private static long maxLicense = 1000 * 3600 * 24 * 30; // ~ roughly 30 days
private static long minLicense = 1000 * 3600 * 24 * 3; // ~ roughly 3 days
long lMax = System.currentTimeMillis() + maxLicense;
long lMin = System.currentTimeMillis() + minLicense;
if ((lValidityTimestamp > lMin) && (lValidityTimestamp < lMax)) {
validityTimestamp = Long.toString(lMax);
}
// <--- added by me
mValidityTimestamp = lValidityTimestamp;
mPreferences.putString(PREF_VALIDITY_TIMESTAMP, validityTimestamp);
}