【问题标题】:In-app billing acknowledgePurchase issue [using google play in-app billing library]In-app billing acknowledgePurchase 问题 [使用 google play 应用内计费库]
【发布时间】:2019-12-16 18:40:08
【问题描述】:

我是 android 新手,第一次尝试实现应用内结算。

我正在使用 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); 



        }

    }



}

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

我的代码是否可以正确消费购买的商品?或者我需要在消费之前添加一个单独的确认购买。

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

谢谢。

【问题讨论】:

    标签: java android in-app-purchase in-app-billing android-inapp-purchase


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      欢迎来到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                        
      
                          }
                      });
                  }
              }
      

      【讨论】:

      • 这将确认购买,我可以在后端提供内容和设置标志。但它会改变 OriginalJson 中的确认标志值吗?在确认并运行 queryPurchase 后,它仍然显示“acknowledged”:false,这是我的 OriginalJson= {“packageName”:“mypackage”,“acknowledged”:false,“orderId”:“transactionId.android.test.purchased” ,"productId":"android.test.purchased","developerPayload":"","purchaseTime":0,"purchaseState":0,"purchaseToken":mytoken"}。它是否会因为它是测试 ID 而不是真实的购买 ID 而保持错误?
      • 我从不考虑 Json 中的 acknowledged 参数,对我来说,如果购买成功完成,真正说明的是它显示为 Charged 在 Google Play 管理中心 的 订单管理 中几分钟后
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2019-10-22
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多