如果我要消费或确认购买的商品,则Google Play结算库开发人员错误代码5

时间:2019-06-24 23:06:40

标签: android in-app-purchase in-app-billing

我添加了最新的Google Play结算库:

implementation 'com.android.billingclient:billing:2.0.1'

如果我使用“慢速测试卡进行购买,该测试卡会在几分钟后获得批准”(这是Google用来测试应用内购买的测试卡):

val params = BillingFlowParams
   .newBuilder()
   .setSkuDetails(skuId)
   .build()

 billingClient.launchBillingFlow(activity, params)

一切正常,直到我尝试确认或消费该产品:

val consumeParams = ConsumeParams
   .newBuilder()
   .setPurchaseToken(purchase.purchaseToken)
   .build()

billingClient.consumeAsync(consumeParams, this)

我在回调中遇到以下错误:

/**
     * Invalid arguments provided to the API. This error can also indicate that the application was
     * not correctly signed or properly set up for In-app Billing in Google Play, or does not have
     * the necessary permissions in its manifest
     */
    int DEVELOPER_ERROR = 5;

我还收到一条调试消息,说明购买的商品处于无效状态(PENDING)。可能我无法使用/确认没有“成功”状态的购买。

根据Google的说法,我有3天可以消费或确认购买的商品,否则将予以退款。

但是,如果他们在购买后不允许我立即进行购买,该如何使用或确认购买呢?

  1. 我没有服务器,消费/确认应在移动设备上进行
  2. 在购买将被验证(获得SUCCESS状态时,我无法让用户在应用程序中看到加载进度对话框/视图。通过测试帐户,我会在5到6分钟内得到通过SUCCESS创建新的“ onPurchasesUpdated(billingResult: BillingResult?, purchases: MutableList<Purchase>?)”状态

我正在使用MVVM体系结构(Activity - ViewModel),并且在Activity内,我保留Billing Client库(因为该库需要一个Context),并且在ViewModel业务逻辑中。

Google似乎不希望我们将计费客户端库“绑定”到活动/视图模型,而是在Service中使用它,并在Application类中实例化它。可能与ObserversBroadcastReceivers通信并收听购买更新。并且Purchase被验证或拒绝后,我应该更新用户的个人资料。这已经可能会引起问题,因为在没有不可撤销的粘性通知的情况下我无法启动Service,因为这是前台服务,因此我应该通知用户该应用程序在后台运行。这会吓到用户。

这个新的购买流程打破了很多事情。这不应该是异步的。在现实生活中,当我购买东西时,我将钱交给收银员,然后我不会在5分钟后收到我的产品/服务!我应该如何处理?用户进行了购买,然后我通知用户他/她将在Google确认后的5分钟内获得产品?这应该是瞬时的。

您如何处理应用内购买?

2 个答案:

答案 0 :(得分:1)

答案很简单。告诉用户已发生购买请求,但尚未确认或处理付款或请求。

这种情况应该并且必须是异步的,因为这种情况可能在某些情况下发生,并且确实是现实生活中发生的情况,例如,当用户使用非即时付款方式时。有些付款方式可能需要几天的时间才能完成-并非每个人都使用信用卡/借记卡或礼品卡进行在线支付,而且不是每个人都可以!例如,在巴西,有Boleto付款系统,该系统易于付款,但处理时间较长。人们为自己的物品付款,打印出收据,然后在某些地方排队排队购买物品。之所以这样做,是因为获得国际在线卡非常困难,尤其是在穷人中。

因此,您需要做的就是获得新购买的商品。检查其状态。如果成功,则您的付款完成,并告知用户。如果是PENDING,请告知用户付款请求已完成,并等待Google确认付款。

如果您在“待处理”状态下进行购买,当付款清除时,您会通过应用程序流程收到新的购买请求,但是这次它将表示购买成功。

如果这不适合您当前的体系结构,则必须更改您的体系结构。

答案 1 :(得分:1)

我可能聚会晚了,但是我希望它能帮上忙。我的情况是响应代码5无效令牌。成功确认后尝试消费订阅产品时出现此错误。我犯了一个错误,要区分哪些需要消耗,哪些不需要。