Мы сталкиваемся с каким-то интересным сценарием.В одном из наших производственных приложений к нам пришел пользователь, который купил приложение раньше, и даже тогда он не может использовать расширенные функции.
В нашем приложении мы использовали IAP (библиотека биллинга Google Play,не IABHelper) с одноразовым методом продукта: мы позволяем пользователю купить приложение, а затем никогда не потребляем продукт.Метод, которым мы следуем: После прочтения некоторых вопросов здесь и изучения документации, я обнаружил, что BillingClient.queryPurchases(INAPP)
сканирует покупки локально и каких-либо неактивных продуктов там нет, и из-за того, что они нетам, если премиум-функции активны, мы отключаем его.
BillingClient.queryPurchaseHistoryAsync(INAPP, listener)
возвращает все продуктов, независимо от того, активны они или нет, но продукт не является подпиской, поэтому Purchase.isAutoRenewing()
всегда ложно.
Вот проблема: если мы сотрем данные Google Play или сбросим телефон и снова загрузим приложение, так как данные в Google Play удалены, BillingClient.queryPurchases(INAPP)
возвращает пустой список, дажеесли пользователь купил приложение раньше.В этом сценарии метод BillingClient.queryPurchaseHistoryAsync(INAPP, listener)
представляется полезным, но он не содержит никакой информации о том, является ли продукт активным или возвращен .
Конечный случайнам нужно потреблять продукт, если он возвращается, чтобы закрыть премиальные функции (или активировать их, так как нет локальной информации), но нет данных о том, что продукт куплен, а данные из самого API с queryPurchaseHistoryAsync
не содержат никаких данных.информация о товаре активна или нет, она просто есть, показывает, что она была куплена раньше.Так как же мы узнаем, что кто-то купил этот товар и не получил возмещение?