No se puede averiguar cómo restaurar transacciones en compras dentro de la aplicación en Android

Estoy muy confundido con la facturación de la aplicación de Android con respecto a RESTORE_TRANSACTIONS.

Tengo este fragmento para hacer una donación dentro de mi aplicación:

BillingHelper.requestPurchase(mContext, "donation");

Funciona muy bien, no hay problemas allí. El problema está aquí, cuando la compra se completa, establezco un valor booleano:

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

La aplicación funciona según lo previsto después de esto, a menos que el usuario desinstale la aplicación. Guardo la DONATE_VERSION dentro de las preferencias compartidas. Almacenar la información de compra en una base de datos personal en Internet no es una opción.

Cuando el usuario vuelve a instalar la aplicación, la única forma en que pueden eliminar los anuncios de la donación es mediante la donación nuevamente. No quiero que este sea el caso. Quiero poder consultar en Google los resultados de qué artículos (en este caso, solo el artículo de "donación") se han comprado. Llamo a esto en onCreate ():

BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());

Pero ahora que? Si el usuario ya compró la "donación" administrada en la aplicación, ¿cómo puedo consultar en google para obtener información sobre qué artículos se compraron en la facturación de la aplicación, para poder configurar mi booleano de nuevo? Por favor, sea lo más claro posible, ya que he estado jugando con esto, chateando en el IRC y revisando las API durante aproximadamente 6 horas y no puedo resolverlo.

EDITAR:

Mi método 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);
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta