如何将应用内购买订阅添加到 Android?

问题描述

我正在尝试对我的 android java 应用实施应用内购买订阅,并按照此链接中的教程进行操作

https://developer.android.com/google/play/billing/integrate#java

我创建了一个新的测试项目并按照步骤操作,但不确定我必须在以下两个字段中输入什么内容

 BillingClient client = ...
 AckNowledgePurchaseResponseListener ackNowledgePurchaseResponseListener = ...

公共类 MainActivity 扩展 AppCompatActivity {

private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
    @Override
    public void onPurchasesUpdated(BillingResult billingResult,List<Purchase> purchases) {
        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                && purchases != null) {
            for (Purchase purchase : purchases) {
                handlePurchase(purchase);
            }
        } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
            // Handle an error caused by a user cancelling the purchase flow.
        } else {
            // Handle any other error codes.
        }
    }

    void handlePurchase(Purchase purchase) {
        // Purchase retrieved from BillingClient#queryPurchases or your PurchasesUpdatedListener.
        //Purchase purchase = ...;

        // Verify the purchase.
        // Ensure entitlement was not already granted for this purchasetoken.
        // Grant entitlement to the user.

        ConsumeParams consumeParams =
                ConsumeParams.newBuilder()
                        .setPurchasetoken(purchase.getPurchasetoken())
                        .build();

        ConsumeResponseListener listener = new ConsumeResponseListener() {
            @Override
            public void onConsumeResponse(BillingResult billingResult,String purchasetoken) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    // Handle the success of the consume operation.
                    BillingClient client = ...
                    AckNowledgePurchaseResponseListener ackNowledgePurchaseResponseListener = ...

                    void handlePurchase(Purchase purchase) {
                        if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
                            if (!purchase.isAckNowledged()) {
                                AckNowledgePurchaseParams ackNowledgePurchaseParams =
                                        AckNowledgePurchaseParams.newBuilder()
                                                .setPurchasetoken(purchase.getPurchasetoken())
                                                .build();
                                client.ackNowledgePurchase(ackNowledgePurchaseParams,ackNowledgePurchaseResponseListener);
                            }
                        }
                    }

                }
            }
        };

        billingClient.consumeAsync(consumeParams,listener);
    }
};

private BillingClient billingClient = BillingClient.newBuilder(this)
        .setListener(purchasesUpdatedListener)
        .enablePendingPurchases()
        .build();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(BillingResult billingResult) {
            if (billingResult.getResponseCode() ==  BillingClient.BillingResponseCode.OK) {
                // The BillingClient is ready. You can query purchases here.
                List<String> skuList = new ArrayList<>();
                skuList.add("4");
                SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
                billingClient.querySkuDetailsAsync(params.build(),new SkuDetailsResponseListener() {
                            @Override
                            public void onSkuDetailsResponse(BillingResult billingResult,List<SkuDetails> skuDetailsList) {
                                // Process the result.
                                for (SkuDetails skuDetails : skuDetailsList) {
                                    if (skuDetails.equals("4")) {
                                        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                                                .setSkuDetails(skuDetails)
                                                .build();
                                        int responseCode = billingClient.launchBillingFlow(MainActivity.this,billingFlowParams).getResponseCode();
                                    }
                                }
                            }
                        });

            }
        }
        @Override
        public void onBillingServicedisconnected() {
            // Try to restart the connection on the next request to
            // Google Play by calling the startConnection() method.
        }
    });

}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)