Intereting Posts
Android NDK OpenGL ES 2.0 Шаг текстуры Что особенного в android: inputType = "textPersonName" для EditText Добавить марку выше элемента списка ListView (и ниже последнего) в Android Настраиваемый диалог с кнопкой закрытия 3D-сфера OpenGL Кто-нибудь получил индексацию приложений Firebase для работы? Приобретение приложений на Android: ошибка подписи покупки Исключение из сохраненного состояния Использование инструментов Google Chrome Dev на Android (эмулятор) Покупка в приложении: получите имя или идентификатор учетной записи Google Play, запрашивающей покупку Использование телефона Android в качестве USB-хоста для подключения внешних дисков к телефону и доступа к памяти внешнего накопителя через телефон Получение исключения Nullpointer после обновления до поддержки дизайна Android 22.2.1 Чтение данных из sqlite, где имя столбца содержит пробелы в android Настройка темы / стиля при использовании функции startActivity () Использование Google Карты в Android

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 дней!

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

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

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

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

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

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

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