Google 如果我想消费或确认购买,请播放 Billing library developer error code 5

Google Play Billing library developer error code 5 if I want to consume or acknowledge the purchase

我添加了最新的 Google Play Billing 库:

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

如果我使用 "slow testing card, which always be approved after a couple of minutes" 进行购买(这是来自 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)。可能我无法 consume/acknowledge 购买没有 "SUCCESS" 状态的商品。

根据Google,我有3天的时间消费或确认购买,否则将被退款。

但是如果他们不允许我在购买后立即购买,我应该如何消费或确认购买?

  1. 我没有服务器,consumption/acknowledge应该在手机上制作
  2. 我无法让用户在应用程序中保持加载进度 dialog/view 而购买将被验证(获得 SUCCESS 状态。使用测试帐户,在 5 - 6 分钟内我正在通过 onPurchasesUpdated(billingResult: BillingResult?, purchases: MutableList<Purchase>?))
  3. 获得新的“SUCCESS”状态

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

看起来 Google 不希望我们将计费客户端库 "bind" 到 activity/viewmodel 中,而是在 Service 中使用它并在中实例化它Application class。可能与 ObserversBroadcastReceivers 沟通并收听购买更新。一旦 Purchase 被验证或被拒绝,我应该更新用户的个人资料。这已经会导致问题,因为如果没有不可关闭的粘性通知,我无法启动 Service,因为这是一个前台服务,我应该通知用户该应用程序在 运行背景。这会吓坏用户的。

这个新的购买流程打破了很多东西。这不应该是异步的。在现实生活中,当我买东西时,我把钱交给收银员,然后我在 5 分钟后收到 product/service!我该如何处理?用户购买,那么我通知用户he/she 会在Google确认后5分钟内拿到商品?这应该是瞬时的。

您如何处理应用内购买?

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

这种情况应该而且必须是异步的,因为它可能发生在某些场景中,并且正是现实生活中发生的情况,例如当用户使用非即时支付方式时。某些付款方式可能需要数天才能处理 - 并非每个人都使用 credit/debit 卡或礼品卡进行在线支付,也不是每个人都可以!例如,在巴西有 Boleto 支付系统,支付简单但处理时间长。人们为他们的物品付款,打印收据,然后在某些地方排队付款。之所以这样做,是因为办一张国际在线卡非常困难,尤其是在非常贫穷的人群中。

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

如果您在 PENDING 状态下购买,当付款结清时,您将通过您的应用程序流程收到新的购买请求,但这次它会说购买成功。

如果这不适合您当前的架构,那么您必须更改您的架构。

我可能会迟到,但希望对您有所帮助。我的情况是响应代码 5 无效令牌。成功确认后尝试使用订阅产品时出现此错误。我错误地区分了哪些需要食用哪些不需要。