Не могу понять, как восстановить транзакции при покупках из приложения в Android

Я очень запутался в платежах Android в приложении в отношении RESTORE_TRANSACTIONS.

У меня есть этот фрагмент для пожертвования в моем приложении:

BillingHelper.requestPurchase(mContext, "donation");

Работает отлично, проблем нет. Проблема здесь, когда покупка завершена, я устанавливаю логическое значение:

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

После этого приложение работает так, как задумано, если только пользователь не удалит приложение. Я храню DONATE_VERSION в общих настройках. Хранение информации о покупке в личной базе данных в интернете не вариант.

Когда пользователь переустанавливает приложение, единственный способ удалить рекламу с пожертвований - это сделать пожертвование снова! Я не хочу, чтобы это имело место. Я хочу иметь возможность запросить в Google информацию о том, какие товары (в данном случае это просто «пожертвование») были приобретены. Я вызываю это в onCreate ():

BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());

Но что теперь? Если пользователь ранее приобрел управляемую в приложении покупку «пожертвование», как я могу запросить в Google информацию о том, какие предметы были куплены из биллинга в приложении, чтобы я мог снова установить логическое значение? Пожалуйста, будьте настолько ясны, насколько это возможно, поскольку я возился с этим, болтаю по IRC и изучаю API в течение примерно 6 часов, и я не могу понять это.

РЕДАКТИРОВАТЬ:

Мой метод 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);
    }

Ответы на вопрос(2)

Ваш ответ на вопрос