Не могу понять, как восстановить транзакции при покупках из приложения в 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);
}