RESTORE_TRANSACTIONS に関して、Android のアプリ内課金について非常に混乱しています。
アプリ内で寄付を行うためのこのスニペットがあります。
BillingHelper.requestPurchase(mContext, "donation");
それはうまく機能し、問題はありません。問題はここにあります。購入が完了したら、ブール値を設定します。
if (BillingHelper.latestPurchase.isPurchased()) {
DONATE_VERSION = true;
}
この後、ユーザーがアプリをアンインストールしない限り、アプリは意図したとおりに動作します。DONATE_VERSION を共有設定内に保存します。購入情報をインターネット上の個人データベースに保存することはできません。
ユーザーがアプリを再インストールすると、寄付から広告を削除できる唯一の方法は、再度寄付することです! そうなってほしくありません。どのアイテム (この場合は「寄付」アイテムを突き出す) が購入されたかを Google にクエリできるようにしたいと考えています。これを onCreate() で呼び出します。
BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());
しかし、今は何ですか?ユーザーが以前に「寄付」のアプリ内購入を購入したことがある場合、Google にクエリを実行して、アプリ内課金から購入されたアイテムに関する情報を取得し、ブール値を再度設定できるようにするにはどうすればよいですか? 私はこれをいじったり、IRC でチャットしたり、約 6 時間 API を精査したりしているので、できるだけ明確にしてください。これを理解することはできません。
編集:
私の onReceive() メソッド:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "Received action: " + action);
if (ACTION_PURCHASE_STATE_CHANGED.equals(action)) {
String signedData = intent.getStringExtra(INAPP_SIGNED_DATA);
String signature = intent.getStringExtra(INAPP_SIGNATURE);
purchaseStateChanged(context, signedData, signature);
} else if (ACTION_NOTIFY.equals(action)) {
String notifyId = intent.getStringExtra(NOTIFICATION_ID);
notify(context, notifyId);
} else if (ACTION_RESPONSE_CODE.equals(action)) {
long requestId = intent.getLongExtra(INAPP_REQUEST_ID, -1);
int responseCodeIndex = intent.getIntExtra(INAPP_RESPONSE_CODE, C.ResponseCode.RESULT_ERROR.ordinal());
checkResponseCode(context, requestId, responseCodeIndex);
} else {
Log.e(TAG, "unexpected action: " + action);
}