Мое приложение представляет собой карманный справочник с некоторыми данными за весь год. Я предполагаю, что пользователи будут использовать программу хотя бы один раз с доступом в Интернет для активации лицензии. Или, по крайней мере, я так понимаю, как работает система лицензирования Android. Я использую ServerManagedPolicy.
Периодически проверяется ли лицензия? Есть ли способ, которым я могу контролировать это? Я не хочу, чтобы мои пользователи были в гуще событий: приложение уже было активировано и ранее было активировано, и внезапно через 1 неделю, 1 месяц, 1 год и т. Д. Приложение начинает ограничивать удобство использования самого приложения, поскольку лицензия не может быть проверенным снова . Мое приложение будет использоваться в удаленных местах с беспорядочным доступом к сети (его нельзя воспринимать как должное все время) людьми, которые будут жить там неделями, может даже месяцами.
Я чувствую, что должен хотя бы предупредить их, что их будут просить каждые X недель делать это. Является ли система лицензий даже такой драконовской?
Я знаю, что могу обработать ошибки с помощью флага ERROR_CONTACTING_SERVER в заявке об ошибке, в которой отсутствует 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);
}