web-dev-qa-db-ja.com

Androidでアプリ内購入を承認する方法は?

Play請求ライブラリを確認しました https://developer.Android.com/google/play/billing/billing_library_overview 3日以内にすべての購入を承認する必要があります。購入を適切に承認しないと、それらの購入が払い戻されます。このプロセスでは、購入を承認する方法が明確にされていません。これは私が試したものですこれはそれを行う正しい方法ですか?前もって感謝します

@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();
                    }
                }
            });
        }
18
Surya Ganesh

それは、購入のほぼ半分を承認することについて言及しています link 。タイプに応じて、購入を承認するさまざまな方法があります。

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

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

//For Consumables: 
client.consumeAsync(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

私が投稿したリンクには、サブスクリプションの処理方法に関するサンプルが含まれています。

[〜#〜]更新[〜#〜]

non-consumableの購入を承認する方法のより拡張された例を次に示します。

まず、AcknowledgePurchaseParams Classオブジェクトを作成します。このためには、onPurchasesUpdatedメソッドまたはonPurchasesUpdatedの後に購入を渡した別のメソッドでこれを呼び出す必要があるため、簡単に取得できる購入トークンが必要です。

AcknowledgePurchaseParams acknowledgePurchaseParams =
            AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .build();

次に、2番目のパラメーターとして使用されるリスナーを作成します。これにより、購入が承認された後に何かを行うことができます。この例ではスナックバーメッセージを表示しています(worbelのコメントに従って、このBillingResultの結果を確認できます。おそらく確認する必要があります)。

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

            getMessage("Purchase acknowledged");               
        }

    };

これらを作成したら、BillingClientを使用してacknowledgePurchaseメソッドを呼び出します。

mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

購入は正常に確認されます。

これは、非消費アイテムにacknowledgePurchaseを使用します。

消耗品の購入

これは、呼び出されたものが変更された場合にのみ似ています-上記の例の説明を参照してください。

最初のパラメータ-パラメータ-設定:

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

2番目のパラメーター-リスナー-セットアップ

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

次に、BillingClintとconsumerAsyncを使用します。

mBillingClient.consumeAsync(consumeParams, consumeResponseListener);
17
COYG