Проверка лицензирования на долговечность «активированного» статуса.Как часто это слишком много для пользователя? - PullRequest
8 голосов
/ 22 ноября 2010

Мое приложение представляет собой карманный справочник с некоторыми данными за весь год. Я предполагаю, что пользователи будут использовать программу хотя бы один раз с доступом в Интернет для активации лицензии. Или, по крайней мере, я так понимаю, как работает система лицензирования 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);
}

Ответы [ 4 ]

4 голосов
/ 29 ноября 2010

Только мои два цента, вы можете определить период времени, который вы хотели бы проверить (скажем, 3 дня). Проверьте лицензию через 3 дня, если нет интернета, продолжайте разрешать пользователю использовать ее, скажем, еще одну неделю максимум, иначе приложение не будет полнофункциональным. Или просто продолжайте работать до тех пор, пока не будет снова установлено соединение, тогда вы можете проверить и сбросить отметку времени. Проверка лицензии будет проверяться только тогда, когда вы сообщите об этом.

Я могу уточнить, если это будет необходимо!

Удачи

2 голосов
/ 25 ноября 2010

Дэвид, краткий ответ: решать только вам.

Взято непосредственно из документа разработчика.«Например, сервер предоставляет рекомендуемые значения для срока действия лицензии приложения, периода отсрочки поворота и максимально допустимого числа повторных попыток, среди прочего.»

В зависимости от того, как вы решите реализовать политику, вы выбираете ответ наваш собственный вопрос.

1 голос
/ 22 января 2011

Я получил ответ на это очень просто.Подключите реальное устройство через USB к вашему компьютеру.Отредактируйте исходный код вашей библиотеки LVL в ServerManagedPolicy.java и добавьте в оператор журнала для переменной lValidityTimestamp значение DateFormat.getDateTimeInstance (DateFormat.MEDIUM, DateFormat.MEDIUM).Затем удалите приложение, чтобы очистить все предыдущие отметки времени кэша лицензий, переустановите и запустите приложение.Это связывается с сервером, и тогда ваше заявление регистрации регистрирует ответ.В моем тестировании VT возвращается ровно через 1 день (когда проверяется лицензия).

1 голос
/ 25 ноября 2010

Даже с помощью ServerManagedPolicy ваше приложение будет только проверять лицензию, когда вы вызываете "checkAccess ()", как описано в разделе проверка доступа документа по лицензированию.Если этот вызов никогда не будет выполнен, ваше приложение будет продолжать работать в течение неопределенного времени. Таким образом, если вы можете обнаружить, что ваши пользователи находятся в ситуации, когда они законно не могут пропинговать сервер для получения информации о лицензии, вы можете заключить вызов "checkAccess" вусловие для этого.

Далее на странице есть информация о настройке тестовых учетных записей для проверки функциональности LVL.Я очень рекомендую хорошо использовать эту функцию тестирования.

...