如何在Android中确认应用内购买?

Sur*_*esh 11 android in-app-purchase in-app-billing android-inapp-purchase

我已经浏览了Play计费库 https://developer.android.com/google/play/billing/billing_library_overview。 您必须在三天内确认所有购买。如果未正确确认购买,将导致这些购买被退款。该过程没有明确说明如何确认购买。这就是我尝试过的方法吗?提前致谢

@Override


 public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
        if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK&&purchases!=null){
            Toast.makeText(this, "Purchase Successful", Toast.LENGTH_SHORT).show();
            for(Purchase purchase:purchases){
                handlePurchase(purchase);
            }
        }else if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.USER_CANCELED){
            Toast.makeText(this, "Purchase Cancelled", Toast.LENGTH_SHORT).show();
        }else if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){
            Toast.makeText(this, "Already Purchased", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(this, billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show();
        }



    //in handlePurchase()
 if(!purchase.isAcknowledged())
{ 
          AcknowledgePurchaseParams acknowledgePurchaseParams
                    = AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .setDeveloperPayload(purchase.getDeveloperPayload())
                    .build();

            client.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
                @Override
                public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
                    if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK){
                        Toast.makeText(RemoveAdsActivity.this, "Purchase Acknowledged", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

COY*_*OYG 8

它提到确认通过该链接附近有购买。根据类型,有不同的确认购买方式。

 private BillingClient mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build();

//For non-consumables:
mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener());

//For Consumables: 
client.consumeAsync(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
Run Code Online (Sandbox Code Playgroud)

我发布的链接包含有关如何处理订阅的示例。

更新

这是有关如何确认非消费性购买的更扩展的示例:

首先,创建AcknowledgePurchaseParams参数。为此,您需要购买令牌,您应该能够轻松获得该令牌,因为您应该在onPurchasesUpdated方法或将购买传递给之后的另一种方法中调用此令牌onPurchasesUpdated

AcknowledgePurchaseParams acknowledgePurchaseParams =
            AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .build();
Run Code Online (Sandbox Code Playgroud)

接下来,创建将用作第二个参数的侦听器。这将使您在确认购买后可以做一些事情。在此示例中,我显示了一条快餐栏消息:

AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
        @Override
        public void onAcknowledgePurchaseResponse(BillingResult billingResult) {              

            getMessage("Purchase acknowledged");               
        }

    };
Run Code Online (Sandbox Code Playgroud)

创建完成后,使用BillingClient调用acknowledgePurchase方法:

mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
Run Code Online (Sandbox Code Playgroud)

购买应成功确认。

acknowledgePurchase用于非消耗性物品。

消费品购买

这只是它们被调用的内容是相似的-参见上面示例中的解释:

第一个参数-参数-设置:

ConsumeParams consumeParams = ConsumeParams.newBuilder()
            .setPurchaseToken(purchase.getPurchaseToken())
            .build();
Run Code Online (Sandbox Code Playgroud)

第二个参数-侦听器-设置

    ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
        @Override
        public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
            getMessage("Purchase acknowledged");
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在使用您的BillingClint和ConsumerAsync:

mBillingClient.consumeAsync(consumeParams, consumeResponseListener);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢它很有用。我能够购买并确认但 billingClient.queryPurchasesList().getPurchasesList(); 返回 null。你能帮我解决这个问题吗? (2认同)
  • onAcknowledgePurchaseResponse(BillingResult billingResult) 您应该检查结果是否正常 (2认同)