我是第一次在我的应用中尝试应用内结算。我在Play Billing Services附加功能的samples文件夹中使用了TriviaDrive示例中的labHelper代码(https://gist.github.com/yigit/4543005)。当我尝试使用Google提供的测试代码,即产品代码为'android.test.purchased'(在'Testing with static responses'下提供)时,它运行正常。但现在,我转而使用测试Google帐户(即在“设置测试帐户”here下提供的许可测试)。我成功购买了这件物品。但是当我尝试使用购买的商品(这是一个月度订阅产品)时,我会收到一个错误对话框,上面写着“您已经拥有此商品”。同时,在日志中,我看到了消息
05-02 17:10:36.599:D / Finsky(6396):1 PurchaseFragment.handleError:错误:PurchaseError {type = 3 subtype = 3}
05-02 17:10:36.599:D / Finsky(6396):1 PurchaseFragment.fail:购买失败:PurchaseError {type = 3 subtype = 3}
(响应代码3表示“结算不可用”)
但是,如果我解除了错误对话框,我会得到回复7(即“你已经拥有这个项目”)。
不确定为什么我一直在购买已经购买的物品3?请帮忙。
我尝试了什么
mPurchaseFinishedListener返回响应0(即成功),但它会立即返回错误-1010(IABHELPER_INVALID_CONSUMPTION)
请帮忙。现在已经在这个问题上挣扎超过3天了!
答案 0 :(得分:6)
IabHelper有一个名为enableDebugLogging(...)
的方法,您可以使用它(使用 true 调用它)来为所有IabHelper操作启用非常详细的日志记录。如果您可以发布完整日志的副本,则可能更容易确定究竟发生了什么。
但是,根据你所写的内容,让我发表一些想法:
queryInventoryAsync(...)
(如果inventory.getPurchase(sku)不是 null ,则您拥有该项目)。不幸的是,这是not always 100% accurate,我还没有找到解决办法。因此,如果您尝试在"消费"之前再次购买被管理产品它,你将获得"你已经拥有了这个项目" - 你提到的错误。尝试再次购买已购买且尚未过期的订阅也是如此。
" IABHELPER_INVALID_CONSUMPTION"错误可能是由于订阅无法消费,只有被管理产品才能消费。订阅只会过期(或者您可以从开发者控制台退款)。
我不确定" PurchaseError {type = 3 subtype = 3}" -error来自哪里。从实际的IabHelper调试输出中可以更容易地找到它。如果您可以使用完整日志更新您的问题,请给我发表评论,我可以看看它,如果需要,可能会帮助您理解它。
如果您有任何其他问题,请与我们联系。我希望这会有所帮助。