其他分享
首页 > 其他分享> > 无法弄清楚如何在Android中恢复应用内购买的交易

无法弄清楚如何在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