#android #in-app-purchase #in-app-billing #play-billing-library
#Android #покупка в приложении #биллинг в приложении #play-биллинг-библиотека
Вопрос:
После поиска StackOverflow здесь у меня, похоже, есть что-то, что не работает ни одно из предложенных исправлений (кроме одного, упомянутого ниже).
Я НЕ использую тестовые SKU ( android.test.*
), но создал свой собственный тестовый SKU в консоли play-Store приложения. Я добавил основную учетную запись Google моего телефона / планшета для тестирования лицензии в Play Console. Эта учетная запись НЕ является учетной записью моего разработчика. Этот продукт является одноразовой покупкой, не подлежит использованию.
В моем первом тесте я начал покупку и получил ожидаемое всплывающее окно с двумя кредитными картами («Тестовая карта, всегда одобряется» и «Тестовая карта, всегда отклоняется»). Выбрал карту утверждения, и все сработало, как ожидалось —
- Заказ появился в игровой консоли моего разработчика.
- Приложение распознало покупку, и мой код обработал ее правильно. (ура)
Теперь, по сей день, когда я пытаюсь купить его снова, я получаю код ITEM_ALREADY_OWNLED.
Все, что я сделал, чтобы попытаться очистить это —
- Согласно этой документации, в нем говорилось об отмене / возврате покупки. Итак, я сделал.
- В некоторых отчетах, например, здесь, в StackOverflow, предлагается очистить кэш Play Store (
adb shell pm clear com.android.vending
).
Ни один из них не позволил мне снова выкупить товар.
Единственное, чего я НЕ сделал, это добавил весь код для «потребления» продукта, поскольку, честно говоря, это кажется контрпродуктивным для тестирования. (Добавление кода, который может иметь проблемы, затем после успешного тестирования удаление того же кода, который может вызвать другие проблемы ..)
Меня БОЛЬШЕ всего беспокоит то, что если я верну покупку, это действительно НЕ должно сообщать моему приложению, что товар все еще куплен — потому что, честно говоря, это уже не так: я вернул его.
Моя вторая проблема заключается в правильном тестировании этого, без необходимости временного или постоянного добавления кода для артикулов расходных материалов.
Есть ли другой способ удалить этот «уже купленный» элемент, который мне не хватает? Или я неправильно настроил тестовую учетную запись или тестовую запись лицензии?
Ответ №1:
Товар можно купить только один раз, если вы хотите, чтобы пользователь мог купить его снова, вам нужно позвонить billingClient.consumeAsync()
раньше, затем billingClient.queryPurchases()
вернется, что пользователь не владеет товаром, и тогда он сможет купить его снова
Вы можете использовать consumeAsync()
только для тестирования, а затем отключить эту часть в окончательной версии, это то, что я обычно делаю.
Именно ваш код решает, является ли продукт потребляемым или нет.
Комментарии:
1. Это здорово — но тогда мое первое беспокойство все еще выше.. меня беспокоит. Что происходит, когда я больше не тестирую, и я возвращаю деньги за чью-то покупку. Должно ли мое приложение использовать покупку, чтобы они МОГЛИ купить ее снова, если захотят? (Или, если я хочу быть разработчиком dick, НЕ использовать его, чтобы они никогда не могли получить обновление?)
2. Также обратите внимание, что это НЕ то, что написано на странице разработчика, указанной выше. 🙁
3. Если вы возвращаете деньги, ваш код не нужно использовать, но проблема в том, что серверам Google может потребоваться несколько дней, чтобы пометить элемент как не принадлежащий, вместо этого consumeAsync() имеет немедленный эффект
4. Вы также можете попробовать очистить кеш приложения Play Store на тестовом устройстве, это может ускорить распознавание возврата. Это то, что я не пробовал, так как я обычно использую consumeAsync ()
5. Интересно — я вернул покупку, но прошел день. Понял, что это займет намного меньше времени. Для очистки кэша, да, это не изменилось. Спасибо!