1

我在处理具有多个帐户的设备上的应用内结算库存时遇到问题。

设备 1:

  • 设备上只有一个帐户(用户 = X)
  • 在 google play 上使用帐户 X 登录
  • 在 google play games 上使用帐户 X 登录
  • 购买完成(sku = remove_ads)

设备 2:

  • 设备上的三个帐户(用户 = X、Y、Z)
  • 在 google play 上使用帐户 X 登录
  • 在 google play games 上使用帐户 X 登录
  • 查询库存

处理查询库存响应的代码如下:

@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
    if (result.isFailure()) {
        Log.d("billing", "inventory: failed (" + result.mMessage + ")");
        return;
    }

    Log.d("billing", "inventory: remove_ads purchased=" + inventory.hasPurchase("remove_ads");
}

DEVICE 1 上的 logcat 输出为:

inventory: remove_ads purchased=true

DEVICE 2 上的 logcat 输出为:

inventory: remove_ads purchased=false

我错过了什么?谢谢!

4

1 回答 1

0

这是我的错误,这就是发生的事情:

  1. 在已发布版本(发布签名)上使用 DEVICE 1 完成测试购买,购买成功。
  2. 我开始使用 DEVICE 1 开发下一个版本(调试签名),但由于在此设备上完成购买,google play billing 缓存了响应,当我查询库存时它返回 true。
  3. 一段时间后,我开始使用 DEVICE 2,然后当我查询库存时,google play billing 没有返回任何内容,因为购买没有缓存并且 APK 签名不匹配。

当我使用发布签名签署 APK 并在 DEVICE 2 上对其进行测试时,这一切都开始了。

结论:多注意签名并提防缓存响应

于 2015-07-08T11:41:31.993 回答