应用内计费 V3

6
我在应用内购买方面遇到了问题。我正在使用TrivialDrive示例中的helper类。
以下是我的实现方式:
  1. 用户按下“删除广告”
  2. 启动Helper
  3. 使用Listener检测Helper是否设置完成
  4. 查询库存
  5. 使用Listener检测查询是否完成
  6. 检查是否已经进行过购买。如果是,则删除广告并退出
  7. 如果没有,则启动购买流程。
这在一个设备上正常工作,但是如果用户在另一个设备上购买后再尝试在第二个设备上购买,则第二个设备会按照以下方式工作:
Helper正常设置,然后检查库存,发现没有购买任何物品(我知道更新之前会有一段延迟)。然后它尝试购买,但在Google Play窗口中显示该物品已被购买。如果我能在代码中检测到这一点,那就没问题了,但它返回给监听器说用户取消了购买。
是否有一种方法可以使用purchaseFinishedListener检测用户是否已经购买了该物品?
2个回答

3
handleActivityResult方法中的代码返回“用户取消”。 如果(resultCode == Activity.RESULT_CANCELED){ logDebug("购买已取消 - 响应:" + getResponseDesc(responseCode)); result = new IabResult(IABHELPER_USER_CANCELLED, "用户已取消。"); if (mPurchaseListener!= null)mPurchaseListener.onIabPurchaseFinished(result,null); } 我添加了一行if (responseCode==BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) result = new IabResult(BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED, "成功");

0

试试这个

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new
IabHelper.QueryInventoryFinishedListener() {

public void onQueryInventoryFinished(IabResult result, Inventory inventory) {

    .....................

    if (inventory.hasPurchase(SKU_CONTENT)) {

        mHelper.consumeAsync(inventory.getPurchase(SKU_CONTENT), null);
    }
}

};


我不想消耗该物品,只是想检查它是否已被购买。查询库存报告显示该物品尚未购买(由于延迟),但当我启动购买流程时,它知道我已经购买了,因为它会显示“已购买”。然而,这并没有返回给监听器,只是用户取消了购买。 - Dandroid
不要使用消费代码...只需从此代码中获取SKU详细信息并根据需要使用它。 - Swap-IOS-Android
但是如果我使用这段代码,由于延迟购买尚未完成。 - Dandroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接