Maxim
Maxim

Reputation: 619

Android Google Play Billing - querySkuDetailsAsync resurning empty list

I have an Android project where I want to use com.android.billingclient.api version 4.0.0, which would replace an old billing library that google doesn't allow any more (com.anjlab.android.iab.v3). I've implemented the methods for a one-time purchase, but when querying the SKU Details with billingClient.querySkuDetailsAsync using the SKU string for the product, I get an empty result set. I've been assured that the SKU is correct, so I don't know where the error might be.

Also, the old implementation required to provide a license key, which isn't the case with the new library. Do I need to define it somewhere else in the app?

Here's the code where it fails:

 List<String> skuList = new ArrayList<>();
    skuList.add(SKU_ID);
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(SkuType.INAPP);

    final Activity v = this;

    billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {

        @Override
        public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {

Has anyone a suggestion what to do?

Upvotes: 2

Views: 1669

Answers (2)

Tartar
Tartar

Reputation: 5452

Getting this one working properly depends on several different factors

  • Have you published your app to Play Console or at least to an internal track or something?
  • Do you have active products or subscriptions on your Google Play Console?
  • Have you configured your licensed testers?

Please see the documentation for more info.

Upvotes: 0

Alexandru Dumitru
Alexandru Dumitru

Reputation: 118

This is how I query the SKU details within my app. You can try to use this example and see if this works for you.

billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                Log.d(TAG, "Connection finished");
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    // The BillingClient is ready. You can query purchases here.
                    List<String> skuList = new ArrayList<> ();
                    skuList.add(ITEM_SKU_ADREMOVAL);
                    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
                    billingClient.querySkuDetailsAsync(params.build(),
                            (billingResult1, skuDetailsList) -> {
                                // Process the result.
                                if (billingResult1.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
                                    for (Object skuDetailsObject : skuDetailsList) {
                                        skuDetails = (SkuDetails) skuDetailsObject;
                                        String sku = skuDetails.getSku();
                                        String price = skuDetails.getPrice();
                                        if (ITEM_SKU_ADREMOVAL.equals(sku)) {
                                            removeadsPrice = price;
                                        }
                                        else {
                                            Log.d(TAG,"Sku is null");
                                        }
                                    }
                                    Log.d(TAG, "i got response");
                                    Log.d(TAG, String.valueOf(billingResult1.getResponseCode()));
                                    Log.d(TAG, billingResult1.getDebugMessage());
                                }
                                else if (billingResult1.getResponseCode() == BillingClient.BillingResponseCode.ERROR) {
                                    Toast.makeText(MainActivity.this, "Error in completing the purchase!", Toast.LENGTH_SHORT).show();
                                }
                            });
                }
                else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.SERVICE_TIMEOUT) {
                    Toast.makeText(MainActivity.this, "Service timeout!", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(MainActivity.this, "Failed to connect to the billing client!", Toast.LENGTH_SHORT).show();
                }
            }
            @Override
            public void onBillingServiceDisconnected() {
                restartConnection();
            }
        });

Upvotes: 0

Related Questions