Play課金ライブラリを使用して、購入をトリガーおよび管理し、それによりアプリ内の追加機能のロックを解除しました。この部分は機能しています。
ただし、購入を「復元」するための最良の方法は何ですか。たとえば、アプリを購入した人が新しい電話を購入したとします。 Playストアにログインし、アプリをダウンロードして、「アップグレード」するための支払い画面が表示されていることを確認します。 iOSにはこのための特定の方法がありますが、Android用の方法は知りません。
私の考えは、Playストアをクエリして、アカウントが以前に正常にアイテムを購入したかどうかを確認することです。購入した場合は、アプリ内のローカルアップグレード機能を呼び出します。
2つの同様の方法があるようです。しかし、このシナリオではどちらを使用すればよいですか?ユーザーがスマートフォンを拭いたか、新しいスマートフォンを購入した場所はどこですか?
queryPurchases()
?またはqueryPurchaseHistoryAsync()
?
ドキュメントごとにqueryPurchases
はPlayストアアプリのキャッシュを使用して結果を取得し、queryPurchaseHistoryAsync
は実際にPurchase APで最新の購入を確認します。したがって、あなたの場合はAsync
methodを確認する必要があります。
queryPurchases
アプリ内で購入したすべてのアイテムの購入の詳細を取得します。このメソッドは、ネットワークリクエストを開始せずに、Google Playストアアプリのキャッシュを使用します。
queryPurchaseHistoryAsync
購入が期限切れ、キャンセル、または消費されている場合でも、ユーザーがSKUごとに行った最新の購入を返します。
また、ドキュメントも確認してください。 Cache purchase details on your servers
。 https://developer.Android.com/google/play/developer-api.html#practices
queryPurchases
を使用する必要があります。これにより、各SKUの現在のアクティブな(消費されず、キャンセルされず、期限切れにならない)購入がすべて得られます。
queryPurchaseHistoryAsync
は、各SKUの最新購入のリストを提供するだけなので、必要なことを行いません。有効期限が切れているか、キャンセルされているか、消費されている可能性があり、通知する方法がありません。したがって、このレスポンスを使用して、アプリに適用する購入を特定することはできません。
私の知る限り、queryPurchaseHistoryAsync
の唯一の有効な使用法は、ユーザーに購入履歴のリストを提供することです。それはちょっと変わったボールです。
注:queryPurchases
は同期的であるため、ほとんどの場合、なんらかのバックグラウンドワーカースレッドで実行する必要があります。私はAsyncTask
で実行します。
onBillingSetupFinished()
メソッドに以下を記述します。
_billingClient.querySkuDetailsAsync(params.build(), (responseCodeQuery, skuDetailsList) ->
{
if (responseCodeQuery == BillingClient.BillingResponse.OK && skuDetailsList != null)
{
SkuDetails skuDetails = skuDetailsList.get(0);
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
billingClient.launchBillingFlow(MainActivity.this, flowParams);
}
});
_
ユーザーが以前に購入したことがある場合は、onPurchasesUpdated()
メソッドでresponseCode
を次のように使用できます。
_@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases)
{
if (responseCode == BillingClient.BillingResponse.ITEM_ALREADY_OWNED)
{
// already owns item
}
}
_