Библиотека проверки лицензии Android в автономном режиме

Итак, я настроил Android LVL для своего приложения, чтобы проверить наличие лицензии. Кажется, это отлично работает с тестовыми учетными записями. Проблема в том, что если я отключу интернет-соединение телефона и попытаюсь запустить приложение, проверка лицензии завершится ошибкой и скажет мне, что оно НЕ лицензировано!

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


person ingh.am    schedule 12.10.2010    source источник


Ответы (2)


Видимо ответ на это в том, что лицензия не кешируется при тестировании, а когда на рынке. Я создал небольшое приложение, чтобы проверить это, и оно работает!

person ingh.am    schedule 12.10.2010
comment
С тех пор я обнаружил, что он вообще не кешируется, поскольку у меня были времена, когда пользователь был в автономном режиме, и приложение не проверялось. Какие-либо предложения? - person ingh.am; 18.03.2011
comment
Похоже, дело обстоит так: тестовые ответы не кэшируются, а настоящие ответы кэшируются. noreferrer">groups.google.com/group/android-developers/browse_thread/thread/ - person Snicolas; 09.06.2011

Извините, но я также подтверждаю, что режим полета приводит к невозможности полагаться на какой-либо кеш. Теоретически, если приложение было подключено к сети и пинговало сервер лицензий непосредственно перед выходом из сети, оно могло бы работать. Однако, если телефон находится в автономном режиме в течение значительного периода времени, механизм кэширования отсутствует. Просто посмотрите на код. Я зарегистрировал ошибку в Android: http://code.google.com/p/android/issues/detail?id=12978

Потому что мои пользователи Shout n 'Snap Shoutnsnap.com УЖЕ подтверждают это глупое поведение.

Я сделал обходной путь, используя задачу из двух частей на стороне клиента. НАПРИМЕР:


IF LICENSED:
  PERSIST random key as LK
  PERSIST obfuscated random key as OLK
ELSE:
  if (deobfuscate(OLK) == LK) 
    GRANT ACCESS
  ELSE:
    GET LOST 

Код находится здесь: http://code.google.com/p/androidbest/.

person hunterp    schedule 06.12.2010
comment
Как вы думаете, это плохой план - хранить где-то в базе данных результат проверки лицензии, а затем использовать его, если он доступен? - person ingh.am; 08.12.2010
comment
На самом деле, я сохранил случайно сгенерированный uid и его запутанную версию. Если deobfuscate(uid) == uid, тогда все в порядке. Единственный способ провести деобфускацию — получить код. Для дополнительной защиты было бы неплохо замаскировать и ваш apk. - person hunterp; 08.12.2010
comment
Этот метод звучит хорошо, поскольку он латает дыру в LVL, но это точно так же, как сохранение логического значения в результате проверки лицензии или, скажем, двух логических значений в зашифрованном виде. Под этим я подразумеваю, что если кто-то может приложить руку к двум строкам LK и 0LK и автоматически добавить их в базу данных (или запутать настройки), проверка лицензии будет пройдена. - person Snicolas; 09.06.2011
comment
Добавление этого только тогда, когда люди не в сети, не так уж плохо, и отдавать приоритет истинной проверке лицензии, когда она доступна, звучит хорошим дополнением. - person Snicolas; 09.06.2011