无法弄清楚如何在应用内购买Android中恢复交易(Cannot figure out how to

2019-06-26 16:36发布

我一直很困惑于Android在-申请账单关于RESTORE_TRANSACTIONS。

我有这个片段对我的应用程序内进行捐赠:

BillingHelper.requestPurchase(mContext, "donation");

它的伟大工程,没有任何问题存在。 问题就在这里,在选购的时候完成我设置一个布尔值:

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

该应用程序按预期工作在此之后,除非用户卸载应用程序。 我存储共享偏好内DONATE_VERSION。 存储到互联网上的个人数据库的购买信息是不是一种选择。

当用户重新安装应用程序,他们可以得到广告捐赠删除的唯一方法是通过再次捐赠! 我不希望这是事实。 我希望能够查询谷歌的哪些项目(在这种情况下,突出部分的“捐赠”项目)已购买的结果。 我称这种现象的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);
    }

Answer 1:

你会得到一个PURCHASE_STATE_CHANGED消息的事务信息,只是当你成功购买后做的。 过程,因为它像往常一样,并设置任何标志/喜好需要。 另外,还要确保你只把它在第一次安装时(表示喜好缺失/空),因为经常调用它会被封锁的一段时间内您的应用程序。



Answer 2:

我刚才已经回答这一个类似的问题在这里: https://stackoverflow.com/a/12187921/455886

为恢复交易的典型场景流程如下:

  1. 用户安装的应用程序。

  2. 在您的应用程序的第一次加载,你检查,如果你需要恢复采购。

  3. 如果你这样做,发送给谷歌一个RESTORE_TRANSACTION同步请求。

  4. 谷歌将与acknowlegment响应您的RESTORE_TRANSACTION请求作出回应。 (这仅仅是他们收到您请求acknowlegement。)

  5. 在这一点上,你应该标记您已经发出了恢复请求,谷歌,需要从应用程序发送没有进一步的恢复。

  6. 现在,谷歌异步将开始发送“PURCHASE_STATE_CHANGED”事件到你的应用程序的每个应用程序内购买的用户以前购买的。 此调用是一样的东西,如果用户已经做出购买的第一次谷歌将派出。

  7. 由于它是相同的呼叫,您的应用程序便拿起事件,通常处理它,如果用户刚刚购买了应用内商品(从而“恢复”购功能)。

至于步骤2和5,我已经为我的应用程序做的是保存一个称为SharedPreference值“APP_INITIALISED”,默认为false。 每次我的应用程序启动时,如果“APP_INITIALISED”是假的,我告诉谷歌以RESTORE_TRANSACTION(步骤2)然后我设置APP_INITIALISED为真(步骤5)。



文章来源: Cannot figure out how to restore transactions on in-app purchases in Android