应用内支付确认购买问题 [使用Google Play应用内支付库]

3

我是新手,正尝试首次实现内购。

我正在使用Google Play内购库。 https://developer.android.com/google/play/billing/billing_library_overview

我想要实现可消耗性的内购。我正在使用“android.test.purchased”保留ID进行测试。我可以成功加载skuDetails并进行购买,也可以成功消费购买。

这是我的handlePurchase方法,其中包含consumeAsync。

void handlePurchase(Purchase purchase) {



BillingClient client = BillingClient.newBuilder(NewAdActivity.this)
        .enablePendingPurchases() 
        .setListener(this)
        .build();


if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
     System.out.println("item successfully purchased");


        if (!purchase.isAcknowledged()) {


                    ConsumeParams consumeParams = ConsumeParams.newBuilder()
                        .setPurchaseToken(purchase.getPurchaseToken())
                        .setDeveloperPayload(purchase.getDeveloperPayload())
                        .build();


                     ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
                    @Override
                    public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
                          if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchaseToken != null) {
                              System.out.println("SUCCESSFULLY consumed PURCHASE");
                              providecontent();

                           } 
                        else { 
                              System.out.println("FAILED TO consume:”);
                            }

                    }

                };

                client.consumeAsync(consumeParams, consumeResponseListener); 



        }

    }



}

当我消耗购买时,它是否也会承认购买?我需要手动设置“acknowledged”:true在purchase.originalJson中吗?

我的代码是否正确消费了购买的物品?或者在消费物品之前我需要单独包含 acknowledgePurchase 功能。

请回复。非常感谢任何帮助。

谢谢。

2个回答

1

1
你错误地使用了consumeAsync(),要确认购买,你应该调用acknowledgePurchase()consumeAsync()会移除已购买的物品,例如,如果购买允许用户玩10次,而他全部使用完了,那么你需要调用consumeAsync()来让用户再次购买该物品。
一个例子:
  if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
            // Grant entitlement to the user.
            boolean signOk = verifyPurchaseSignature(purchase.getOriginalJson(), purchase.getSignature());
            if (!signOk) {
                // Alert the user about wrong signature
                return;
            } else if (!purchase.isAcknowledged()) {
                AcknowledgePurchaseParams acknowledgePurchaseParams =
                        AcknowledgePurchaseParams.newBuilder()
                                .setPurchaseToken(purchase.getPurchaseToken())
                                .build();
                billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
                    @Override
                    public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
                        //Give thanks for the purchase                        

                    }
                });
            }
        }

这将确认购买,我可以提供内容并在后端设置标志。但是它会改变OriginalJson中的acknowledged标志值吗?即使确认了它并运行了queryPurchase,它仍然显示“acknowledged:false”。这是我的OriginalJson = {"packageName":"mypackage","acknowledged":false,"orderId":"transactionId.android.test.purchased","productId":"android.test.purchased","developerPayload":"","purchaseTime":0,"purchaseState":0,"purchaseToken":mytoken"}。它是否仍将保持为false,因为它是一个测试ID而不是真实的购买ID? - Gregg Tate
我从来没有考虑过 Json 中的那个 "acknowledged" 参数,对我来说真正能够表明购买是否成功完成的是在几分钟内在 Google Play 控制台中的订单管理中显示为 "Charged"。 - from56

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接