2

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);
    }
4

2 に答える 2

1

購入が成功した後と同様に、PURCHASE_STATE_CHANGED メッセージでトランザクション情報を取得します。通常どおり処理し、必要なフラグ/設定を設定します。また、最初のインストール時にのみ呼び出すようにしてください (上記の設定が見つからない/null の場合)。これを呼び出すと、アプリが一定期間ブロックされることがよくあります。

于 2012-08-02T03:21:59.900 に答える
0

私はここでこれと同様の質問に答えました:https ://stackoverflow.com/a/12187921/455886

復元トランザクションの一般的なシナリオフローは次のとおりです。

  1. ユーザーがアプリをインストールします。

  2. アプリを最初にロードするときに、購入を復元する必要があるかどうかを確認します。

  3. その場合は、RESTORE_TRANSACTION同期リクエストをGoogleに送信してください。

  4. Googleは、RESTORE_TRANSACTIONリクエストに対して確認応答で応答します。(これは、彼らがあなたの要求を受け取ったことの確認にすぎません。)

  5. この時点で、既にGoogleに復元リクエストを送信したことをマークする必要があり、アプリからそれ以上の復元を送信する必要はありません。

  6. これで、ユーザーが以前に購入したアプリ内購入ごとに、非同期でGoogleがアプリへの「PURCHASE_STATE_CHANGED」イベントの送信を開始します。この呼び出しは、ユーザーが初めてその購入を行った場合にGoogleが送信したものと同じです。

  7. 同じ呼び出しであるため、アプリはイベントを取得し、ユーザーがアプリ内製品を購入したばかりであるかのように通常どおりに処理します(これにより、購入した機能が「復元」されます)。

手順2と5に関して、アプリに対して行ったことは、デフォルトでfalseに設定されている「APP_INITIALISED」というSharedPreference値を保持することです。アプリが起動するたびに、「APP_INITIALISED」がfalseの場合、GoogleにRESTORE_TRANSACTIONを指示し(ステップ2)、APP_INITIALISEDをtrueに設定します(ステップ5)。

于 2012-08-30T03:55:17.020 に答える