3

我已经在这里待了一个星期。我无法启动计费流程,请帮助!谢谢。我没有收到任何错误。据我所知,它永远不会使用“public void onSkuDetailsResponse”方法。

我试图将我的整个应用程序剥离到仅计费部分以使其正常工作,但仍然没有任何运气。

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();
            }
        }

    });

需要帮助请叫我

4

1 回答 1

3

好在终于想通了。我使用的是产品名称而不是我的应用内产品中的产品 ID。

于 2021-05-24T18:54:57.760 回答