应用内帐单确认购买问题[使用google play应用内帐单库]

问题描述 投票:1回答:2

我是Android的新手,并尝试首次实施应用内帐单。

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

我想实施消耗性应用内购买。我正在使用'android.test.purchased'保留ID进行测试。我可以加载skuDetails并成功进行购买并成功消费购买]

这是我的带有ConsumerAsync的handlePurchase方法

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



        }

    }



}

我在消费时也确认购买吗?我需要在purchase.originalJson中手动设置“ acknowledged”:true吗?

我的代码正确无误吗?或我需要在消费商品之前添加一个单独的ConfirmPurchase。

请回复。非常感谢您的帮助。

谢谢。

java android in-app-purchase in-app-billing android-inapp-purchase
2个回答
0
投票

欢迎使用stackoverflow!

您不正确地使用了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                        

                    }
                });
            }
        }

0
投票

对于易耗品,您要使用consumpAsync()。对于非消耗品,您要使用acceptPurchase()。有关在您的应用中确认购买的更多信息,请查看官方文档:https://developer.android.com/google/play/billing/billing_library_overview#acknowledge

© www.soinside.com 2019 - 2024. All rights reserved.