我已在应用结算https://github.com/blundell/SimpleInAppPurchaseV3中实施了此项目。除了并没有为Inventory
对象返回所有购买的产品外,一切看起来都有效。
我开始使用id包含多个具有相同前缀的产品,使用java包格式
acmestudio.myapp.upgrade1.red
acmestudio.myapp.upgrade1.blue
acmestudio.myapp.upgrade1.green
这是问题的开始。我购买的第一个, acmestudio.myapp.upgrade1.red 工作并显示在已购买的库存物品中。
然而,在购买其他产品之后会:
我想也许这是一个格式问题,所以我将点符号更改为下划线。然而,同样的事情发生了。现在我有了这些id的多个产品
acmestudio_myapp_upgrade1_red
acmestudio_myapp_upgrade1_blue
acmestudio_myapp_upgrade1_green
而且,它只适用于第一个。所以现在在我购买的Skus列表中,它有: [acmestudio.myapp.upgrade1.red,acmestudio_myapp_upgrade1_blue]
即使我从结算API中看到订单确认,也会发生这种情况
PurchaseInfo:{"orderId":"GPA.1390-8158-3067-22151","packageName":"com.acmestudio.myapp”,
”productId":"acmestudio_myapp_upgrade1_red”,”purchaseTime":1455140848461,"purchaseState":0,
"purchaseToken":"akdnfgpkcnckkcdomomimihi.AO-J1OwKCGfAKHDDsBxbKjeVKRZ0hIOSXALhVPeYaKx2GsVGH6NbVDs4nj6sLf48oUy9Zs0MziVA7xFtebELB0Q6udcN_1fvaNynkFLVVJXJmZGeEiRy9c8KH7HIn2QK2SZc1EzB2NLtOoVu324s2EwPmmtLYKj6MA"}
我想我必须缺少一些步骤,因为我将调试器设置为停在这里..在IabHelper.java的github项目代码中...也就是说,这个问题出现在我甚至没有碰过的代码中。 https://github.com/blundell/SimpleInAppPurchaseV3/blob/master/src/com/android/vending/billing/util/IabHelper.java#L814
ArrayList<String> ownedSkus = ownedItems.getStringArrayList(
RESPONSE_INAPP_ITEM_LIST);
这是我要检查的代码。注意我得到了2个清单对象的实例:
在Asynch电话中
List<String> moreSkus = null;
Inventory inventory = billingHelper.queryInventory(querySkuDetails, moreSkus);
IabHelper.QueryInventoryFinishedListener inventoryLstnr =
new IabHelper.QueryInventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inv)
{
Log.d("Query inventory finished.");
// Is it a failure?
if (result.isFailure()) {
Log.d("Failed to query inventory: " + result);
return;
}
Log.d("Query inventory was successful.");
}
};
billingHelper.queryInventoryAsync(true, inventoryLstnr);
我在这里缺少什么? ..也许我需要独特的前缀?!接下来我会尝试,但似乎不应该存在问题。
答案 0 :(得分:0)
好的,感谢SO的建议,因为我发布了这个问题,看起来这个问题与billingHelper.consumeAsync(..)
电话有关。
通过评论,我正在购买的产品ID出现在inventory.mPurchaseMap
。
我最后偶然发现这篇文章完美地解释了它: https://stackoverflow.com/a/25452735/2162226
正如作者所说:
这是按预期工作的 - 在您正在使用的代码中 立即进行应用内购买,这意味着您可以购买它 再次..
没有任何迹象表明你无法购买托管 产品不止一次。你不能做的是购买托管 之前购买同一个托管项目之前的产品 消耗掉。
这篇帖子是我看到的那个建议,让我朝着正确的方向前进: https://stackoverflow.com/a/18808407/2162226