如何在具有多个帐户的设备上处理应用内结算?
How to handle in-app billing on devices with multiple accounts?
我在处理具有多个帐户的设备上的应用内结算库存时遇到问题。
设备 1:
- 设备上只有一个帐户(用户 = X)
- 在 google 游戏中使用帐户 X 登录
- 在 google 玩游戏时使用帐户 X 登录
- 购买完成 (sku = remove_ads)
设备 2:
- 设备上的三个帐户(用户 = X、Y、Z)
- 在 google 游戏中使用帐户 X 登录
- 在 google 玩游戏时使用帐户 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
而设备 2 上的 logcat 输出是:
inventory: remove_ads purchased=false
我错过了什么?谢谢!
这是我的错误,事情是这样的:
- 在已发布版本(发布签名)上使用 DEVICE 1 完成测试购买,购买成功。
- 我开始使用 DEVICE 1 开发下一个版本(调试签名),但由于购买是在此设备上完成的,google play billing 缓存了响应,并在我查询库存时返回 true。
- 一段时间后,我开始使用 DEVICE 2 工作,然后 google play billing 在我查询库存时没有返回任何内容,因为购买没有缓存并且 APK 签名不匹配。
当我使用发布签名签署 APK 并在 DEVICE 2 上测试它时,一切都开始工作了。
结论:多注意签名,注意缓存响应
我在处理具有多个帐户的设备上的应用内结算库存时遇到问题。
设备 1:
- 设备上只有一个帐户(用户 = X)
- 在 google 游戏中使用帐户 X 登录
- 在 google 玩游戏时使用帐户 X 登录
- 购买完成 (sku = remove_ads)
设备 2:
- 设备上的三个帐户(用户 = X、Y、Z)
- 在 google 游戏中使用帐户 X 登录
- 在 google 玩游戏时使用帐户 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
而设备 2 上的 logcat 输出是:
inventory: remove_ads purchased=false
我错过了什么?谢谢!
这是我的错误,事情是这样的:
- 在已发布版本(发布签名)上使用 DEVICE 1 完成测试购买,购买成功。
- 我开始使用 DEVICE 1 开发下一个版本(调试签名),但由于购买是在此设备上完成的,google play billing 缓存了响应,并在我查询库存时返回 true。
- 一段时间后,我开始使用 DEVICE 2 工作,然后 google play billing 在我查询库存时没有返回任何内容,因为购买没有缓存并且 APK 签名不匹配。
当我使用发布签名签署 APK 并在 DEVICE 2 上测试它时,一切都开始工作了。
结论:多注意签名,注意缓存响应