如何在具有多个帐户的设备上处理应用内结算?

时间:2015-07-05 12:19:05

标签: android in-app-billing android-multiple-users

我在使用多个帐户的设备上处理应用内结算广告资源时遇到问题。

设备1:

  • 设备上只有一个帐户(用户= X)
  • 在Google Play上使用帐户X登录
  • 在Google Play游戏中使用帐户X登录
  • 购买完成(sku = remove_ads)

设备2:

  • 设备上的三个帐户(用户= X,Y,Z)
  • 在Google Play上使用帐户X登录
  • 在Google Play游戏中使用帐户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

我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

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

  1. 使用已发布版本(发布签名)上的DEVICE 1进行测试购买,购买成功完成。
  2. 我开始使用DEVICE 1处理下一个版本(调试签名),但是当在此设备上完成购买时,Google Play结算缓存了响应,当我查询库存时它返回true。
  3. 过了一段时间我开始使用DEVICE 2,然后当我查询库存时谷歌游戏结算没有返回任何内容,因为购买没有被缓存且APK签名不匹配。
  4. 当我使用发布签名签署APK并在DEVICE 2上测试它时,一切都开始工作了。

    结论:通过签名和提防缓存响应来加强关注