Не удается обеспечить надежную работу лицензирования Android Market (LVL). Почти всегда возвращает RETRY

Я пытаюсь заставить лицензирование Android работать в моем первом приложении Android.

Я следовал онлайн-руководствам и интегрировал код LVL, используя ServerManagedPolicy.

Независимо от того, какой ответ на проверку лицензии я установил в консоли разработчика, я почти всегда (9 раз из 10) получаю LicenseResponse.RETRY. Потому что DEFAULT_MAX_RETRIES = "0" это всегда преобразуется в NOT_LICENSED

Я пробовал:

  • включение/выключение Wi-Fi
  • запуск платных приложений, которые я купил (они все работают!)
  • отключение USB
  • работает в виртуальной машине и мой настоящий телефон

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

Как я могу заставить это работать надежно?


Изменить 1


Нашел это в логах. Означает ли это, что есть проблема с подключением к приложению Android Market?

08-18 21:12:16.071: INFO/LICENSE(10852): checkLicense
08-18 21:12:17.271: INFO/LicenseChecker(10852): Binding to licensing service.
08-18 21:12:17.281: WARN/ActivityManager(80): Unable to start service Intent { act=licensing.ILicensingService }: not found
08-18 21:12:17.281: ERROR/LicenseChecker(10852): Could not bind to service.
08-18 21:12:17.301: INFO/LICENSE(10852): dontAllow

person Twisted    schedule 11.08.2011    source источник


Ответы (2)


Есть две вещи, которые могут вам помочь:

  1. Предполагая, что вы используете консоль разработчика для моделирования ответа, иногда требуется более нескольких минут, чтобы обновить ответ, который вы получили от предыдущих попыток. Поэтому, если вы имитировали ответ FAILED, вам, вероятно, придется немного подождать, прежде чем вы сможете получить ответ SUCCESS. Иногда даже перезагрузка вашего устройства не помогает, поэтому вам просто нужно подождать.
  2. У механизма LVL есть некоторые проблемы, и даже на устройствах пользователей вы можете получить ответ FAILED, когда на устройстве какое-то время отсутствует подключение к Интернету, или какая-либо другая сетевая ошибка. Что я рекомендую, так это иметь несколько повторных попыток поверх встроенных повторных попыток LVL, так как я обнаружил, что ему нельзя доверять и оно подвержено ошибкам. Это, вероятно, уменьшит количество ложноотрицательных отчетов, которые вы получите от своих пользователей...
person Muzikant    schedule 18.08.2011
comment
Я еще не дошел до того, что тестирование не удалось :-( что касается вашего пункта 2 - о каком количестве повторных попыток вы говорите? Я просто попытался изменить значение по умолчанию на 3, что задержало, но не помешало загрузке, это немного побочный вопрос, но много ли вы видите ложноотрицательных результатов? - person Twisted; 18.08.2011
comment
Я имел в виду, что не полагайтесь на повторные попытки ServerManagerPolicy. Я не изменил для него настройки по умолчанию и просто реализовал собственный механизм повторных попыток, который, как только я получаю какой-либо ответ, который не является УСПЕХОМ, я продолжаю пытаться снова и снова (в настоящее время он установлен на 20 повторных попыток), и я все еще получаю несколько ложных -отрицательный, в основном потому, что у пользователя нет подключения к Интернету во время проверки лицензии, и я не думаю, что вы можете что-то с этим сделать, если вы не игнорируете ответ FAILED, когда соединение недоступно. - person Muzikant; 19.08.2011
comment
Только что видел, как вы редактировали - Вы используете это на эмуляторе? если это так, то, вероятно, на нем не установлено приложение Market, и это то, что вы видите здесь (механизм LVL зависит от наличия установленного Market для проверки лицензирования) - person Muzikant; 19.08.2011
comment
Нет. Он работает на реальном телефоне с версией 2.1. - person Twisted; 19.08.2011

Убедитесь, что это есть в вашем AndroidManifest:

<uses-permission android:name="com.android.vending.CHECK_LICENSE" />

Это необходимо для запуска кода проверки лицензии.

person Robert Massaioli    schedule 24.01.2012
comment
Спасибо за предложение, которое у меня уже было в моем манифесте. Оказалось lvl не очень терпим к медленным ответам сети. Я изменил источник LVL, который, похоже, решил эту проблему. - person Twisted; 28.01.2012
comment
@Twisted Правда? Это хорошо знать! Хотя я подозреваю, что именно поэтому у них есть повторная попытка. - person Robert Massaioli; 29.01.2012