#android #in-app-purchase
#Android #покупка в приложении
Вопрос:
У меня следующая проблема:
Мое приложение можно загрузить бесплатно, но его можно обновить с помощью покупки в приложении. Покупка работает нормально. Теперь я проверяю при запуске, обновлено ли приложение или нет, чтобы инициализировать бесплатные или обновленные функции.
По умолчанию приложение предполагает, что оно НЕ обновлено, используя bool, для которого по умолчанию установлено значение false. При запуске приложение запрашивает приобретенные товары и устанавливает для bool значение true, если была приобретена обновленная версия.
Проблема в том, что подключение к Google Play с помощью сервиса выполняется асинхронно. Это означает, что при запуске в некоторых случаях приложение считается не обновленным, хотя это так, из-за асинхронных подключений к службам, которые занимают слишком много времени.
Можно ли дождаться завершения подключения к службе, прежде чем проверять версию приложения? В документах говорится, что с API-версией 3 информация о покупке кэшируется локально. Разве невозможно получить кэшированную информацию без использования асинхронного подключения к службе?
Конечно, я мог бы сохранить информацию об обновлении самостоятельно, используя настройки, но если пользователь хочет установить приложение на другое устройство, обновленная версия будет рассматриваться как не обновленная. Кто-нибудь сталкивался с такой же проблемой и нашел способ решить эту проблему?
Ответ №1:
Если вы посмотрите здесь:
В нем говорится, что «Вызовы API версии 3 будут обслуживаться через поиск в кэше, а не через сетевое подключение к Google Play».
Это означает, что служба Google Play оптимизирует ваши запросы для возврата кэшированных результатов (если таковые имеются), хотя это происходит асинхронно из-за взаимодействия между процессами между вашим приложением и службами Google Play.
Я бы посоветовал, когда ваше приложение будет установлено на новое устройство. Запускайте, как если бы загружалась бесплатная версия, проверяя предыдущие покупки в «фоновом режиме», и корректно обновляйте, если у пользователя уже есть обновление.
Комментарии:
1. Спасибо за информацию, но это не решает мою проблему. Он по-прежнему асинхронный, и я не могу полагаться на результат при запуске.
2. Я только что отредактировал свой пост с предложением, посмотрите, решит ли это вашу проблему. Хотя я не думаю, что есть способ мгновенно проверять предыдущие покупки.
3. Другим способом было бы заставить пользователя ждать (показывать панель прогресса или что-то в этом роде), пока вы не получите ответ от служб G-Play.
4. Ваше отредактированное предложение может сработать. Я запущу приложение как бесплатную версию, и если служба обнаружит обновленную версию, я могу показать сообщение типа «обнаружена обновленная версия» или что-то в этом роде, сохраните результат в настройках и перезапустите приложение. Я думаю, что это сработает, но это довольно сложно и не оптимально для пользователя. Я попробую это предложение, и если я не получу лучшего ответа, я приму ваш :).