Billing Flow not launching

718 Views Asked by At

I've been at this for a week. I cannot get the billing flow to launch, please help!. Thanks. I'm not getting any errors. From what I can tell it is never hitting the "public void onSkuDetailsResponse" method.

I've tried to strip my entire app down to just the billing section to get it to work but still not having any luck.

private void setupBillingClient() {
    billingClient = BillingClient.newBuilder(this).setListener(this).enablePendingPurchases().setListener(this).build(); //billingClient = BillingClient.newBuilder(this).enablePendingPurchases().build(); //
    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                Toast.makeText(getApplication(), "success to connect billing", Toast.LENGTH_SHORT).show();
                loadAllSKUs();
            }
        }

        @Override
        public void onBillingServiceDisconnected() {

        }
    });
}

private void loadAllSKUs() {
    final List<String> skuList = new ArrayList<>();
    skuList.add("GunVault Donation"); //from play store...do this for multiple items if have them
    //  SkuDetailsParams params = SkuDetailsParams.newBuilder()
    //           .setSkusList(skuList)
    //           .setType(BillingClient.SkuType.INAPP)
    //          .build();
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
    billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {     //     billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener()
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) { //     if (skuDetailsList != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                for (Object skuDetailsObject : skuDetailsList) {   //     for (final SkuDetails skuDetails : skuDetailsList) {
                    final SkuDetails skuDetails = (SkuDetails) skuDetailsObject;

                    String sku = skuDetails.getSku();
                    String price = skuDetails.getPrice();
                    String gunVaultDonation;

                    Toast.makeText(About.this, skuDetails.getSku() + " " + sku, Toast.LENGTH_SHORT).show();

                    final BillingFlowParams params = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetails)
                            .build();

                    btnDonate.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(getApplication(), "Donate clicked", Toast.LENGTH_SHORT).show();
                            BillingFlowParams billingFlowParams = BillingFlowParams
                                    .newBuilder()
                                    .setSkuDetails(skuDetails)
                                    .build();
                            billingClient.launchBillingFlow(About.this, billingFlowParams);
                        }
                    });




                }
            } else if (billingResult.getResponseCode() == 
               BillingClient.BillingResponseCode.ERROR) {
                Toast.makeText(About.this, "Error", Toast.LENGTH_SHORT).show();
            }
        }

    });

Let me know if you need anything else

1

There are 1 best solutions below

1
On

Well finally figured it out. I was using the Product Name instead of the Product ID from my In-app products.