如果我想消费或确认购买,Google Play 结算库开发者错误代码为 5

Zba*_*ian 4 android in-app-purchase in-app-billing

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

implementation 'com.android.billingclient:billing:2.0.1'
Run Code Online (Sandbox Code Playgroud)

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

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

 billingClient.launchBillingFlow(activity, params)
Run Code Online (Sandbox Code Playgroud)

一切都很顺利,直到我尝试承认或消费该产品:

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

billingClient.consumeAsync(consumeParams, this)
Run Code Online (Sandbox Code Playgroud)

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

/**
     * 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;
Run Code Online (Sandbox Code Playgroud)

我还收到一条调试消息,指出购买处于无效状态(待处理)。也许我无法消费/确认没有“成功”状态的购买。

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

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

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

我正在使用MVVM架构 ( Activity - ViewModel),并在其中Activity保留计费客户端库(因为该库需要Context)和ViewModel业务逻辑。

看起来 Google 不希望我们将计费客户端库“绑定”到活动/视图模型,而是在 a 中使用它Service并在Application类中实例化它。可能与Observers或进行通信BroadcastReceivers并监听购买更新。一旦Purchase验证或拒绝,我应该更新用户的个人资料。这已经可能会导致问题,因为如果Service没有不可关闭的粘性通知,我就无法启动,因为这是前台服务,我应该通知用户该应用程序正在后台运行。这会吓坏用户。

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

您如何处理应用内购买?

Chr*_*ond 5

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

这种情况应该而且必须是异步的,因为它可能发生在某些场景中,并且正是现实生活中发生的情况,例如当用户使用非即时的支付方式时。某些付款方式可能需要数天的时间才能处理 - 并非每个人都使用信用卡/借记卡或礼品卡进行在线付款,也不是每个人都可以!例如,巴西有Boleto支付系统,支付方便,但处理时间较长。人们付款后,打印收据,然后去某些地方排队付款。这样做是因为获得国际在线卡非常困难,特别是对于非常贫穷的人来说。

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

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

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


Bhi*_*bim 5

我可能会迟到参加聚会,但我希望这会有所帮助。我的情况是响应代码 5 无效令牌。在成功确认后尝试使用订阅产品时,我收到此错误。我犯了一个错误,区分哪一个需要消耗,哪一个不需要。