Android: покупка в приложении возвращает 3 кода ошибки (элемент уже принадлежит) всегда

Я пытаюсь запустить приложение в приложении в своем приложении в первый раз. Я использую код labHelper ( https://gist.github.com/yigit/4543005 ) из примера TriviaDrive в папке samples в дополнительных сервисах Play Billing Services. Когда я попытался с помощью тестового кода, который Google дает, например, код продукта как «android.test.purchased» (см. Здесь в разделе «Тестирование со статическими ответами» ), он работал нормально. Но теперь я перешел на использование тестового аккаунта Google (например, тестирование лицензии, данное в разделе «Настройка тестовых учетных записей» здесь ). Я купил предмет успешно. Но когда я пытаюсь использовать купленный товар (это ежемесячный продукт подписки), появляется диалоговое окно с сообщением «У вас уже есть этот элемент». В то же время в журналах я вижу сообщение

05-02 17: 10: 36.599: D / Finsky (6396): 1 PurchaseFragment.handleError: Ошибка: PurchaseError {type = 3 subtype = 3}

05-02 17: 10: 36.599: D / Finsky (6396): 1 PurchaseFragment.fail: Ошибка покупки: PurchaseError {type = 3 subtype = 3}

(Код ответа 3 означает «биллинг недоступен»)

Но, если я отклоню диалоговое окно ошибки, я получаю ответ 7 (т. Е. «У вас уже есть этот элемент»).

Не знаете, почему я продолжаю получать 3 за предмет, который уже был куплен? Пожалуйста помоги.

Что я пробовал

  1. Я попытался вызвать startSetup () и прослушиватель OnIabSetupFinishedListener () в onCreate () Activity. Получаю ответ 0.
  2. Затем я попробовал метод labHelper '' queryInventoryAsync (mReceivedInventoryListener) ', и он также возвращает 3.
  3. Я попытался использовать связанные с потреблением методы из класса labHelper launchSubscriptionPurchaseFlow (это, InAppBillingExportProductId, 10001, mPurchaseFinishedListener, "");

MPurchaseFinishedListener возвращает ответ 0 (т. Е. Успех), но он немедленно возвращает ошибку -1010 (IABHELPER_INVALID_CONSUMPTION)

Пожалуйста помоги. Борьба с этой проблемой уже более 3 дней!

Solutions Collecting From Web of "Android: покупка в приложении возвращает 3 кода ошибки (элемент уже принадлежит) всегда"

У IabHelper есть метод, называемый enableDebugLogging(...) который вы можете использовать (называть его истинным ), чтобы включить довольно подробное ведение журнала для всех действий IabHelper. Если вы можете опубликовать копию полного журнала, может быть проще выяснить, что именно происходит.

Но позвольте мне написать пару мыслей в любом случае на основе того, что вы написали:

  • Подобно обычным управляемым продуктам, элементы подписки не могут быть приобретены снова, если они уже принадлежат.
  • Способ проверки права собственности – через queryInventoryAsync(...) (если inventory.getPurchase (sku) не является нулевым , у вас есть элемент). К сожалению, это не всегда на 100% точнее, и я еще не нашел исправления.
  • Чтобы «использовать» управляемый продукт или подписку, просто попросите приложение предоставить любую проданную услугу, если указанная выше проверка сообщает вам, что этот элемент принадлежит.
  • Большая разница между управляемыми продуктами и подписками – это то, что пользователь снова теряет их (т. Е. Может приобрести тот же sku на второй или третий раз):
    • Подписки истекают автоматически в конце заранее определенного периода, если пользователь не обновляет их,
    • В то время как управляемые продукты должны активно «поглощаться» вашим приложением, чтобы сделать их доступными снова.

Итак, если вы попытаетесь снова купить управляемый продукт до того, как его «потребляете», вы получите «у вас уже есть этот элемент», который вы упомянули. То же самое происходит с попыткой снова приобрести подписку, которую вы уже приобрели, и которая еще не истекла.

Ошибка «IABHELPER_INVALID_CONSUMPTION», скорее всего, вызвана тем фактом, что подписки не могут быть использованы, только управляемые продукты могут. Подписки заканчиваются (или вы можете вернуть их с консоли разработчика).

Я не уверен, откуда происходит ошибка «PurchaseError {type = 3 subtype = 3}». Это может быть проще отследить от фактического вывода отладки IabHelper. Если вы можете обновить свой вопрос с помощью полного журнала, пришлите мне комментарий, и я могу взглянуть на него и, вероятно, поможет вам разобраться в этом, если потребуется.

Дайте мне знать, если у вас возникнут дополнительные вопросы. Надеюсь, это поможет.