Библиотека биллинга Android Play: onSkuDetailsResponse responseCode равен 0, но размер skuDetailsList также равен 0

Сейчас я использую новую Библиотеку биллинга Google Play

В основном, я следовал документации, чтобы запросить доступные для покупки товары.

 SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setSkusList(skuList).setType(itemType);
            mBillingClient.querySkuDetailsAsync(params.build(),
                    new SkuDetailsResponseListener() {

                        @Override
                        public void onSkuDetailsResponse(int responseCode,
                                                         List<SkuDetails> skuDetailsList) {
                            listener.onSkuDetailsResponse(responseCode, skuDetailsList);
                        }

Однако responseCode равен 0, и список также пуст. Но я проверил на BillingSetupFinished успешно. SkuList, предоставленный для SkuDetailsParams.Builder, не является пустым, а значения в skuList (sku_id) также совпадают с идентификатором продукта, указанным в консоли Google Play.

Кто-нибудь знает причину? Спасибо!!


person TheOska    schedule 17.10.2017    source источник
comment
Одна проблема может заключаться в том, что вы не используете подписанный apk с хранилищем ключей выпуска.   -  person KERiii    schedule 17.10.2017
comment
У меня точно такая же проблема . Так сложно найти ответ. Я не хочу публиковать (даже в бета-версии) незавершенное приложение и получать его на рассмотрение в Google   -  person coolcool1994    schedule 16.08.2020


Ответы (9)


Похоже, у вас проблемы с настройкой консоли Google Play.

Пожалуйста, проверьте, что:

  • your app is published in Play Console (to PROD or your @gmail account is in the user's alpha/beta group)
    • I also recommend adding your test @gmail account into license testers list to avoid being charged and license issues
  • имеет правильную подпись и код версии тестового приложения равен опубликованному
  • все ваши артикулы также опубликованы
  • ваше приложение Play Store корректно работает на тестируемом телефоне (например, позволяет покупать приложения)

И подождите некоторое время после завершения настройки.

person goRGon    schedule 19.10.2017
comment
Спасибо!! Наконец, я могу запросить эти элементы, потому что я не поместил приложение в Play Console и просто протестировал его с помощью релиза apk. Но мне очень любопытно, почему образец лаборатории кода (codelabs.developers.google.com / codelabs / play-billing-codelab) может запрашивать продукты, продаваемые через приложение, напрямую, не выполняя выпуск приложения в Play Console. - person TheOska; 19.10.2017
comment
Обязательно ли публиковать незаконченное приложение только для того, чтобы проверить свою покупку в приложении? Обязательно ли Google проверять ваше незавершенное приложение только для того, чтобы вы могли протестировать его при покупке приложения? В этом нет никакого смысла. Вы должны иметь возможность тестировать в покупках приложения, не публикуя его. Поэтому я не знаю, верен ли этот ответ или Google только что допустил этот дефект. - person coolcool1994; 16.08.2020
comment
У Google есть один большой недостаток - они удалили мое приложение с помощью только внутреннего тестирования apk - именно для целей iap, потому что у него (отключена) библиотека объявлений внутри, в которой imho не платил за то, что его не забанил Google. Так что да, вы должны опубликовать apk для тестирования, и да, они забанят ваше приложение, если захотят, даже внутреннее. - person Tertium; 24.06.2021
comment
В моем случае мне действительно нужно подождать некоторое время после активации подписок, чтобы получить их в моем приложении. - person Cube; 20.07.2021

Я потратил несколько часов на решение этой проблемы, и проблема заключалась в том, что в моей отладочной сборке / сборках CI было applicationIdSuffix. Таким образом, только производственная сборка с правильным applicationId смогла получить продукты.

person hrach    schedule 15.12.2018
comment
Не могли бы вы объяснить, где это? - person Faizan Haidar Khan; 07.07.2020
comment
Это может быть ваш файл app / build.gradle - раздел android и buildTypes. - person hrach; 07.07.2020
comment
Это исправило это для меня, спасибо - person Matt Robertson; 12.05.2021

У меня тоже была такая же проблема, но, выполнив следующие действия, я получил SkuDetails.

  • Остановить приложение Google Play
  • Удалить кеш приложения Google Play
  • Остановите приложение и запустите его
person takahirom    schedule 09.11.2018
comment
Это решает множество проблем, я добавил новый номер SKU в консоль Google, и он не появился, пока я не удалил кеш приложения Google Play! - person Evilripper; 12.05.2019
comment
Решил и мою проблему. - person walox; 29.05.2021

Основная проблема заключается в том, что Google кэширует данные вашего SKU, и существует несколько уровней кеширования.

Локальное приложение Google Play Store на вашем телефоне кэширует данные SKU, и серверная часть Google тоже кэширует их. (В компьютерных науках есть только две сложные вещи: инвалидация кеша и именование вещей.)

В конце концов, если вы подождете достаточно долго, срок действия кешей истечет, и Google начнет показывать нужную информацию. Но у кого есть на это время?

Поскольку здесь присутствует элемент времени, трудно понять, что помогает, а что нет, но вот что сработало для меня.

  1. Установите версию APK на дорожке для внутреннего тестирования. (В первый раз, когда вы сделаете это, вам придется подождать, пока ваше приложение закончит Pending Publication. Ожидание само по себе может решить проблему.)

    Настройте хотя бы одного тестировщика, получите ссылку для подписки (для этого нужно дождаться, пока ваше приложение завершит публикацию «Ожидающая публикация») и подписаться.

  2. Принудительно остановите и удалите кеш приложения "Google Play Маркет" в разделе "Приложения" в приложении "Настройки". Нажмите «Хранилище», чтобы получить доступ к кнопке «Очистить кеш».

  3. Загрузите версию приложения через трек Internal Test. Используйте android.util.Log для регистрации данных вашего SKU и используйте Logcat, чтобы убедиться, что данные вашего SKU отображаются правильно.

… Но не волнуйтесь, вам не придется делать это каждый раз, когда вы захотите протестировать. После обновления кеша Google Play Store вы сможете получить доступ к своим SKU в отладочных сборках с помощью Android Studio.

Если это не работает в вашей внутренней тестовой сборке

  1. Удалите приложение, принудительно остановите приложение Google Play Store, очистите его кеш и снова загрузите сборку Internal Test.
  2. Все еще не работает? Что-то не так в вашей консоли разработчика Google Play. Возможно, ваш продукт еще не активен? Возможно, вы неправильно написали артикул в своем списке?

Если он работает в вашей внутренней тестовой сборке, но не работает в отладочной сборке на том же устройстве

В этом случае кеш Google Play Store верен, но ваша отладочная сборка отличается от созданной вами внутренней тестовой версии.

  1. Убедитесь, что ваша отладочная сборка использует то же имя пакета, что и внутренняя тестовая сборка. applicationIdSuffix - частый виновник здесь.
  2. Убедитесь, что код версии вашей отладочной сборки совпадает с кодом версии APK, который вы загрузили во Internal Test.
  3. Попробуйте вручную установить APK-файл для внутреннего тестирования, не используя Google Play Store. Если это сработает, у вас есть два APK, один из которых работает, а другой - нет. Осмотрите их на предмет различий. (APK-файлы представляют собой zip-файлы; вы можете найти их там.)
person Dan Fabulich    schedule 25.05.2019

Если продукт, интегрированный в приложение, является подпиской, обязательно установите SkuType.SUBS, а не SkuType.INAPP

val skuDetailsParams = SkuDetailsParams.newBuilder()
    ...
    .setType(SkuType.SUBS)
    .build()

GL

Источник

person Braian Coronel    schedule 05.08.2019

Загружать apk не нужно.

Вы должны получить skus. BillingClient должен работать, даже если вы протестируете его в режиме отладки.

Убедитесь, что продукты или подписки активны.

Дайте ему немного времени. Процесс выставления счета на обновление ваших продуктов может занять пару часов.

person live-love    schedule 07.07.2018
comment
Мне потребовался почти день, чтобы на android появились дополнительные подписки. У меня уже была одна рабочая установка управляемого продукта на консоли в живом приложении. - person Adil Soomro; 19.02.2020
comment
Все мои подписки активны. Я отдал более 24 часов. Тем не менее SKUDetailsList имеет 0 объектов всякий раз, когда я запрашиваю querySkuDetailsAsync. Я не опубликовал свое приложение. - person coolcool1994; 16.08.2020

В дополнение к предыдущим ответам SkuDetailsList может быть пустым, если вы выполняете поиск без подключения к Интернету. Таким образом, вы также должны управлять этой ситуацией в своем коде.

person Pablo Alfonso    schedule 29.11.2019

Это также может произойти для пользователей в странах, где покупки в приложении недоступны (Куба, Китай и т. Д.).

Проверьте статус страны в разделе Pricing & distribution на игровой консоли

person user5480949    schedule 04.03.2020

Ваше приложение должно быть одобрено в магазине Google Play, это может занять до 1 недели.

person Josef Vancura    schedule 26.03.2020
comment
вам нужно, чтобы ваше незавершенное приложение было рассмотрено и одобрено Google, чтобы вы могли протестировать его при покупке приложения? Не имеет смысла. - person coolcool1994; 16.08.2020
comment
coolcool1994, согласен - person Eray Alparslan; 10.01.2021