无法弄清楚如何在Android中恢复应用内购买的交易
作者:互联网
关于RESTORE_TRANSACTIONS,我对Android的in-appl结算非常困惑.
我有这个片段在我的应用程序中进行捐赠:
BillingHelper.requestPurchase(mContext, "donation");
它工作得很好,没有问题.问题出在这里,购买完成后我设置了一个布尔值:
if (BillingHelper.latestPurchase.isPurchased()) {
DONATE_VERSION = true;
}
除非用户卸载应用程序,否则应用程序将在此之后按预期工作.我将DONATE_VERSION存储在共享首选项中.将购买信息存储在互联网上的个人数据库中不是一种选择.
当用户重新安装应用时,他们可以将捐赠广告从捐赠中删除的唯一方法是再次捐赠!我不希望这种情况发生.我希望能够向Google查询已购买哪些项目(在本例中为“捐赠”项目)的结果.我在onCreate()中调用它:
BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());
但现在呢?如果用户之前购买过托管应用购买“捐赠”,我如何查询谷歌以获取有关从应用内结算中购买了哪些商品的信息,以便我可以再次设置我的布尔值?请尽可能清楚,因为我一直在搞乱这个,在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);
}
解决方法:
您将在PURCHASE_STATE_CHANGED消息中获得交易信息,就像您在成功购买后一样.像往常一样处理并设置您需要的任何标记/首选项.另外,请确保您只在首次安装时调用它(当所述首选项缺失/为空时),因为经常调用它会使您的应用程序在一段时间内被阻止.
标签:android,in-app-purchase,in-app-billing 来源: https://codeday.me/bug/20191009/1876644.html