Приложение не подключается к службе лицензий правильно после обновления Android Billing Library до последней версии 2.0 - PullRequest
1 голос
/ 19 мая 2019

Я обновил библиотеку Android Billing до версии 2.0 (выпущено в этом месяце).

В дополнение к незначительным изменениям (бесполезно сообщать здесь), я отредактировал эту строку для поддержки новой версии библиотеки:

cl = BillingClient.newBuilder(mActivity).setListener(this).build();

таким образом:

cl = BillingClient.newBuilder(mActivity).enablePendingPurchases().setListener(this).build();

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

Чтобы заставить все Skus выполнять удаление методов для жесткого кодирования Sku (честно говоря, я не знаю, как их удаление должно улучшить что-либо), я попытался выполнить запрос, используя этот код querySkuDetails():

SkuDetailsParams.Builder spb = SkuDetailsParams.newBuilder();
cl.querySkuDetailsAsync(spb.build(), new SkuDetailsResponseListener() {
    @Override
    public void onSkuDetailsResponse(BillingResult br, List<SkuDetails> ls) {

    }
});

Но код ответа BillingResult всегда равен 5 DEVELOPER_ERROR, если я помещаю вызов метода в onBillingClientSetupFinished.

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

Биллинговая служба может подключиться к своему бэкэнду, но эта операция по какой-то причине завершается неудачно. Кажется, ошибка в том, как я использую querySkuDetails(), потому что onSkuDetailsResponse всегда возвращает код 5 DEVELOPER ERROR, несмотря на то, что код состояния, который я получаю в onBillingSetupFinished, равен OK.

Ответы [ 3 ]

0 голосов
/ 20 мая 2019

Может быть, это потому, что в вашем проекте уже был IInAppBillingService.aidl. Попробуйте убрать его и почистить проект.

0 голосов
/ 25 мая 2019

Согласно документации при использовании querySkuDetailsAsync(...): https://developer.android.com/google/play/billing/billing_library_overview#Query

SkuDetailsParam, который вы передаете, должен также иметь список SKU и SkuType (либо SkuType.INAPP, либо SkuType.SUBS). Вы пропустили эти два поля в приведенном вами примере кода.

Пример кода из документов:

val skuList = ArrayList<String>()
skuList.add("premium_upgrade")
skuList.add("gas")
val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList).setType(SkuType.INAPP)
billingClient.querySkuDetailsAsync(params.build(), { billingResult, skuDetailsList ->
    // Process the result.
})

Кроме того, в настоящее время пример проекта Google GitHub не был обновлен для Billing v2, но он все еще полезен, если вы хотите получить как SkuType.INAPP, так и SkuType.SUBS: https://github.com/googlesamples/android-play-billing/blob/master/TrivialDrive_v2/shared-module/src/main/java/com/example/billingmodule/billing/BillingManager.java

0 голосов
/ 19 мая 2019

-1 SERVICE DISCONNECTED означает, что onBillingClientSetupFinished() не произошло, и .querySkuDetailsAsync() должен запускаться после onBillingClientSetupFinished();если возвращается 5 DEVELOPER_ERROR, имя пакета или открытый ключ могут не совпадать и / или каким-либо образом не может быть подключена служба биллинга.

...