标签:android in-app-purchase in-app-billing
关于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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。