Kann nicht herausfinden, wie Transaktionen für In-App-Käufe in Android wiederhergestellt werden

Ich bin sehr verwirrt über die In-App-Abrechnung von Android in Bezug auf RESTORE_TRANSACTIONS.

Ich habe diesen Ausschnitt für eine Spende in meiner App:

BillingHelper.requestPurchase(mContext, "donation");

Es funktioniert super, keine Probleme. Das Problem ist hier, wenn der Kauf abgeschlossen ist, setze ich einen Booleschen Wert:

if (BillingHelper.latestPurchase.isPurchased()) {
          DONATE_VERSION = true;
}

Die App funktioniert danach wie vorgesehen, es sei denn, der Benutzer deinstalliert die App. Ich speichere die DONATE_VERSION in gemeinsamen Einstellungen. Das Speichern der Kaufinformationen in einer persönlichen Datenbank im Internet ist keine Option.

Wenn der Benutzer die App erneut installiert, können die Anzeigen nur durch erneutes Spenden vom Spenden entfernt werden! Ich möchte nicht, dass dies der Fall ist. Ich möchte in der Lage sein, Google nach den Ergebnissen abzufragen, für die Artikel (in diesem Fall nur die "Spende") gekauft wurden. Ich rufe dies in onCreate () auf:

BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());

Aber was jetzt? Wenn der Nutzer zuvor den in der App verwalteten Kauf von "Spende" gekauft hat, wie kann ich Google abfragen, um Informationen darüber zu erhalten, welche Artikel über die In-App-Abrechnung gekauft wurden, sodass ich meinen Booleschen Wert erneut festlegen kann? Seien Sie bitte so klar wie möglich, da ich damit herumgespielt, im IRC geplaudert und die APIs nun seit ungefähr 6 Stunden durchsucht habe und ich das nicht herausfinden kann.

BEARBEITEN:

Meine onReceive () Methode:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage