Java 应用内计费确认采购问题[使用google play应用内计费库]

Java 应用内计费确认采购问题[使用google play应用内计费库],java,android,in-app-purchase,in-app-billing,android-inapp-purchase,Java,Android,In App Purchase,In App Billing,Android Inapp Purchase,我是android新手,第一次尝试实现应用内计费 我在应用程序库中使用google play。 我想实施应用程序内消费品购买。我正在使用“android.test.purchased”保留id进行测试。我可以加载skuDetails并成功购买和消费 这是我使用ConsumeSync的handlePurchase方法 void handlePurchase(Purchase purchase) { BillingClient client = BillingClient.newBuilde

我是android新手,第一次尝试实现应用内计费

我在应用程序库中使用google play。

我想实施应用程序内消费品购买。我正在使用“android.test.purchased”保留id进行测试。我可以加载skuDetails并成功购买和消费

这是我使用ConsumeSync的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

我的代码用于消费购买的物品是否正确?或者我需要在消费商品之前包含一个单独的确认采购

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


谢谢。

欢迎来到stackoverflow

您错误地使用了
consumerasync()
,要确认购买,您应该调用
acknowledgePurchase()

consumerasync()
删除购买的物品,例如,如果购买物品允许用户玩10次,并且用户使用了所有这些物品,那么您将调用
consumerasync()
让用户再次购买物品

例如:

  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                        

                    }
                });
            }
        }

对于耗材产品,您希望使用ConsumeSync()。对于非耗材的产品,您希望使用acknowledgePurchase()。有关在应用程序中确认购买的更多信息,请查看官方文档:

这将确认购买,我可以提供内容并在后端设置标志。但它会改变原始JSON中已确认的标志值吗?在确认并运行queryPurchase之后,它仍然显示“已确认”:false。这是我的原始JSON={“packageName”:“mypackage”,“已确认”:false,“orderId”:“transactionId.android.test.purchased”,“productId”:“android.test.purchased”,“developerPayload”:“purchaseTime”:0,“purchaseState”:0,“purchaseToken”:mytoken“}。因为它是一个测试id而不是一个真正的购买id,所以它仍然是假的吗?我从来没有考虑Json中已确认的参数,对于我来说,如果购买成功完成,真正说明的是,在Google Play控制台的订单管理中,几分钟后它看起来是收费的