何が問題なのか、@overrided onPurchaseStateChange
またリクエストしているアクティビティで が呼び出されないことがあるのはなぜなのかわかりませんがonPurchaseStateChange
、BillingReceiverとBillingServiceで常に呼び出されることを確認できます。
何らかの理由で、コールバックが呼び出し元のアクティビティに到達しないことがあります。
ちなみに、この問題は管理対象製品またはサブスクリプションを購入した場合にのみ発生するようです。管理対象外の商品を購入すると、必ずコールバックが届きます。
解決策は次のとおりです (サンプル アプリケーションの購入アクティビティのリクエスト - ダンジョン アクティビティ):
@Override
public void onPurchaseStateChange(PurchaseState purchaseState, String itemId, int quantity, long purchaseTime, String developerPayload) {
if (purchaseState == PurchaseState.PURCHASED) {
onPurchaseStateChange = true;
// Do whatever you need to do after purchase here first.
}
}
@Override
public void onRequestPurchaseResponse(RequestPurchase request, ResponseCode responseCode) {
if (responseCode == ResponseCode.RESULT_OK) {
if (!onPurchaseStateChange) {
// If onPurchaseStateChange = false, the onPurchaseStateChange callback didn't arrive from the BillingService, so you can perform your after purchase actions here.
}
} else if (responseCode == ResponseCode.RESULT_USER_CANCELED) {
} else {
}
}
解決策 2 (正しい解決策のようです):
Google のサンプル コードには、次のメソッドが含まれています。
@Override
protected void onStop() {
super.onStop();
ResponseHandler.unregister(YOUR_PURCHASE_OBSERVER);
}
これにより、Play ストアの購入アクティビティを開いた瞬間にオブザーバーが登録解除されます。アクティビティに戻ると (購入後または [戻る] ボタンのいずれか)、onStart
が呼び出されて が再起動されますpurchaseObserver
が、常に購入情報が含まれているとは限りません。これにより、onPurchaseStateChange
が呼び出されることはありません。
解決策は、onStop から unregister を削除し、onDestroy に移動することです。別の解決策は、それをそのままにして、以前に受信した詳細を保持するキューから開始することです。こちらをご覧ください: Android アプリ内課金. ResponseHandler の登録を解除するのはいつですか?