В настоящее время я тестирую In-App Billing для будущего приложения, и после того, как я успешно «купил» тестовый элемент «android.test.purchased» в первый раз, теперь я получаю код ответа 7 каждый раз, когда пытаюсь купить его снова, Это означает, что этот предмет у меня уже есть.
12-15 23: 02: 14.149: E / IabHelper (19829): Ошибка биллинга в приложении: невозможно купить товар, реакция на ошибку: 7: Товар уже в собственности
Насколько я понимаю, эта покупка должна быть возможна всегда, верно? Чтобы разработчик мог протестировать свое приложение?
Если нет, как я могу «сбросить» его состояние на «не принадлежит»? Я использую служебный пакет из образца Google In-App Billing Sample.
android
in-app-billing
psykhi
источник
источник
Ответы:
Добавьте этот код в поток, чтобы инициировать запрос на потребление.
Здесь для проверки покупки PurchaseToken
И
тогда потребление успешное.
также не забудьте сделать mService общедоступным в
тогда можно было бы получить доступ так:
источник
Нет необходимости писать специальный код потребления. Просто используйте команду adb для очистки данных в Google Play Store:
источник
Оказывается, элемент android.test.purchased ведет себя как обычный идентификатор. Это означает, что если вы хотите иметь возможность купить его снова, вы должны использовать его где-нибудь в своем коде. Я думаю, что документация Google вводит в заблуждение по этому поводу и что они должны добавить еще один статический идентификатор, который вы можете бесконечно покупать в тестовых целях.
источник
billingClient.queryPurchases()
не возвращаю этот неиспользованный предмет, поэтому теперь я не могу потреблять предмет, потому что не могуpurchaseToken
его получить,Версия в приложении 3:
источник
Версия 3 - Самый быстрый способ решения : очистка кеша Google Play Store позволит снова сделать "android.test.purchased" доступным.
источник
я использовал оболочку adb:
источник
Вот как мы можем потреблять Предмет
источник
android.test.purchase
в какой-то момент, что вызывало проблемы - задача инвентаризации в биллинге в приложении просто вызвала кучу ошибок и так и не была завершена. Выполнение этого как разового варианта очистило его, так что я мог возобновить использование моего фактического SKU и продолжить работу, как раньше. СпасибоНа мой взгляд, если ваша программа не предназначена для использования элемента, вам не нужно настраивать код, чтобы очистить память внешнего поставщика. Это сделает ваш код более хрупким, и тогда вам придется потратить много времени на добавление и удаление кода, который не принадлежит вашему программному обеспечению, поэтому внедрять подобное решение - плохой дизайн.
Лучшее решение, которое помогло мне очистить android.test.purchased, было
а потом
Мне не нужно было снимать наличные и просматривать настройки моих приложений или изменять для этого код. Мне действительно нужно было добавить adb в переменные пути в системе Windows, что было довольно просто. Так что да, вам нужно использовать adb, который вам, вероятно, нужен в любом случае ..
Вы просто добавляете свой C: \ ... \ android-sdk \ platform-tools; в пути Windows в переменных среды, и я полагаю, что это довольно просто в Mac и Linux OS. Надеюсь, это поможет кому-то тратить на несколько дней меньше времени на внедрение Android в биллинг приложений.
источник
uninstall
не надо очищать android.test.purchased sku.Основная проблема в том, что вы должны потреблять
android.test.purchased
предмет. Но этот элемент не будет доступен в вашем инвентаре запроса, поэтому вы не сможете использовать его в обычном потоке.Итак, если вы используете IabHelper в
IabHelper
классе, вы можете временно изменитьIInAppBillingService
mService на общедоступный, чтобы он был доступен из вашего IabHelper.Тогда в своем классе вы можете потреблять вот так:
В случае успеха ответ будет 0.
Надеюсь это поможет.
источник
consumeAsync()
на android.test.purchased . С этим нет проблем.В целях тестирования я также предлагаю вам вставить фрагмент кода, который будет очищать все продукты, которые вы купили, перед вызовом метода, который инициализирует поток покупок gp. Это особенно удобно, когда вы тестируете в данный момент только один элемент. Например, вот так:
источник
перейдите в консоль Google Play и откройте вкладку «Управление заказами». Там вы можете вернуть / отменить тестовые покупки.
источник
Если вы находитесь в тестовой среде
1) В случае покупки android.test.purchased я могу сбросить фальшивый платеж, перезапустив устройство Android (израсходованный инвентарь).
2) В InApp util есть файл под названием Security.java, сделайте его следующим образом для временного использования. Поскольку тестовый платеж (поддельный) всегда возвращает false из-за исключения безопасности.
Затем в вашем OnIabPurchaseFinishedListener вызовите fechInvForconsumeItem ()
FechInvForconsumeItem () - это
Consume Listener - это
источник
источник
В моем случае оказалось, что Google не регистрирует покупку товара. Скорее, локальная копия Сервисов Google Play кеширует покупку. Таким образом, когда на том же устройстве будет сделан второй запрос,
android.test.purchased already owned
появится. Однако использование другого устройства или сброс устройства очищает кеш и позволяет повторить покупку.источник
В моем случае мне просто нужно было очистить кеш приложений. После очистки кеша я снова смог инициировать процесс покупки.
Со своего устройства (4.4.2) я перешел в «Настройки-> Диспетчер приложений». Затем я выбрал приложение на вкладке «ЗАГРУЖЕННЫЕ», а затем «Очистить кеш».
источник
В этом разница между расходными и непотребляемыми предметами; Состояние непотребляемых предметов (с чем, похоже, вы здесь имеете дело) постоянно отслеживается, в то время как расходные предметы можно покупать несколько раз. Вам нужно будет зайти в консоль управления Play и отменить / вернуть деньги за продажу, чтобы протестировать ее снова.
источник