skuDetailsList возвращает ноль - PullRequest
2 голосов
/ 01 июля 2019

Я пытаюсь осуществить покупки в приложении, используя последнюю версию Биллинг Google Play Библиотека (2.0.1)

• Я добавил идентификаторы продуктов в skuList и в консоли Google Play после публикации apk во Внутреннем тестировании приложений

• Но когда я запускаю billingFlow, я получаю следующее

2019-07-01 13:17:02.436 1225-1225/com.mypackage.myapp D/InAppBilling: Other code5
2019-07-01 13:17:02.436 1225-1225/com.mypackage.myapp D/InAppBilling: Invalid SKU input params. SKU can't be null

Вот мой код:

List skuList = new ArrayList<>();

        skuList.add("product_1");
        skuList.add("product_2");
        skuList.add("product_3");
        skuList.add("product_"4);

 SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
        mBillingClient.querySkuDetailsAsync(params.build(),
                new SkuDetailsResponseListener() {
                    @Override
                    public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                                && skuDetailsList != null) {

                            for (Object skuDetailsObject : skuDetailsList) {
                                skuDetails = (SkuDetails) skuDetailsObject;
                                String sku = skuDetails.getSku();
                                String price = skuDetails.getPrice();
                                if ("product_1".equals(sku)) {

                                    textA.setText(price);
                                } else if ("product_2".equals(sku)) {
                                    textB.setText(price);
                                } else if ("product_3".equals(sku)) {
                                    textC.setText(price);
                                } else if ("product_4".equals(sku)) {
                                    textD.setText(price);
                                }

} else {
                            Log.d(TAG, "Sku is null");
                        }
                        Log.d(TAG, "i got response");
                        Log.d(TAG, String.valueOf(billingResult.getResponseCode()));
                        Log.d(TAG, billingResult.getDebugMessage());


                    }


                });
        mBuyButton = findViewById(R.id.pay);
        mBuyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                    BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetails)
                            .build();
          mBillingClient.launchBillingFlow(PayActivity.this, flowParams);
}
        });

а вот и logcat

2019-07-01 13:17:04.173 1225-1225/com.mypackage.myapp D/InAppBilling: Sku is null
2019-07-01 13:17:04.173 1225-1225/com.mypackage.myapp D/InAppBilling: i got response
2019-07-01 13:17:04.173 1225-1225/com.mypackage.myapp D/InAppBilling: -1 //billing result response code 
2019-07-01 13:17:04.173 1225-1225/com.mypackage.myapp D/InAppBilling: Service connection is disconnected. //debug message

Я также пробовал с зарезервированными идентификаторами тестовых продуктов android.test.purchase , но та же ошибка

Я также загрузил приложение на Play Console (внутреннее тестирование), но оно тоже не сработало

Любая помощь приветствуется ...

EDIT: После многих экспериментов я обнаружил, что Billing Service отключается но причина не как ниже https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponse#service_disconnected (-1)

mBillingClient = BillingClient.newBuilder(PayActivity.this).setListener(this).enablePendingPurchases().build();
        mBillingClient.startConnection(new BillingClientStateListener() {


            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {

                Log.d(TAG, "Connection finished");
            }

            @Override
            public void onBillingServiceDisconnected() {
                //TODO implement your own retry policy
                // Try to restart the connection on the next request to
                // Google Play by calling the startConnection() method.
                mBillingClient.startConnection(this);
            }
        });

и после получения ответа onBillingSetupFinished вызывается

Ответы [ 3 ]

1 голос
/ 01 июля 2019

Повторить попытку подключения

@Override
            public void onBillingSetupFinished(BillingResult billingResult) {
if(!billingResult.getResponseCode==BillingClient.BillingResponseCode.OK){
mBillingClient.startConnection(this);
}
                Log.d(TAG, "Connection finished");
            }
1 голос
/ 01 июля 2019

Инициализируйте свой skuList следующим образом, а затем добавьте продукты -

List<String> skuList = new ArrayList<> ();
   skuList.add("product_1");
    skuList.add("product_2");
    skuList.add("product_3");
    skuList.add("product_4");
0 голосов
/ 03 июля 2019

Проблема решена путем перевода моего приложения в альфа-тестирование

...