Android:应用内购买返回3个错误代码(项目已拥有)始终

时间:2015-05-05 06:22:34

标签: android

我是第一次在我的应用中尝试应用内结算。我在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:3​​6.599:D / Finsky(6396):1 PurchaseFragment.handleError:错误:PurchaseError {type = 3 subtype = 3}

05-02 17:10:3​​6.599:D / Finsky(6396):1 PurchaseFragment.fail:购买失败:PurchaseError {type = 3 subtype = 3}

(响应代码3表示“结算不可用”)

但是,如果我解除了错误对话框,我会得到回复7(即“你已经拥有这个项目”)。

不确定为什么我一直在购买已经购买的物品3?请帮忙。

我尝试了什么

  1. 我尝试在Activity的onCreate()中调用startSetup()和侦听器OnIabSetupFinishedListener()。我得到回应0。
  2. 然后我尝试了labHelper类''queryInventoryAsync(mReceivedInventoryListener)'方法,它也返回3.
  3. 我尝试了labHelper类的消费相关方法 launchSubscriptionPurchaseFlow(这一点,               InAppBillingExportProductId,                10001,mPurchaseFinishedListener,“”);
  4. mPurchaseFinishedListener返回响应0(即成功),但它会立即返回错误-1010(IABHELPER_INVALID_CONSUMPTION)

    请帮忙。现在已经在这个问题上挣扎超过3天了!

1 个答案:

答案 0 :(得分:6)

IabHelper有一个名为enableDebugLogging(...)的方法,您可以使用它(使用 true 调用它)来为所有IabHelper操作启用非常详细的日志记录。如果您可以发布完整日志的副本,则可能更容易确定究竟发生了什么。

但是,根据你所写的内容,让我发表一些想法:

  • 与普通的被管理产品一样,如果订购商品已经拥有,则无法再次购买。
  • 检查所有权的方法是通过queryInventoryAsync(...)(如果inventory.getPurchase(sku)不是 null ,则您拥有该项目)。不幸的是,这是not always 100% accurate,我还没有找到解决办法。
  • 使用"使用"托管产品或订阅,如果上述检查告诉您该项目是自有的,只需让您的应用程序提供您销售的任何服务。
  • 被管理产品和订阅之间的最大区别在于用户再次失去它们的方式(即可以第二次或第三次购买相同的sku):
    • 如果用户没有续订,订阅将在预定时间段结束时自动失效,
    • 而被管理产品需要积极地消费"通过您的应用程序再次使用它们。

因此,如果您尝试在"消费"之前再次购买被管理产品它,你将获得"你已经拥有了这个项目" - 你提到的错误。尝试再次购买已购买且尚未过期的订阅也是如此。

" IABHELPER_INVALID_CONSUMPTION"错误可能是由于订阅无法消费,只有被管理产品才能消费。订阅只会过期(或者您可以从开发者控制台退款)。

我不确定" PurchaseError {type = 3 subtype = 3}" -error来自哪里。从实际的IabHelper调试输出中可以更容易地找到它。如果您可以使用完整日志更新您的问题,请给我发表评论,我可以看看它,如果需要,可能会帮助您理解它。

如果您有任何其他问题,请与我们联系。我希望这会有所帮助。