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天的时间消费或确认购买,否则将被退款。
但是如果他们不允许我在购买后立即购买,我应该如何消费或确认购买?
- 我没有服务器,consumption/acknowledge应该在手机上制作
- 我无法让用户在应用程序中保持加载进度 dialog/view 而购买将被验证(获得
SUCCESS
状态。使用测试帐户,在 5 - 6 分钟内我正在通过 onPurchasesUpdated(billingResult: BillingResult?, purchases: MutableList<Purchase>?)
) 获得新的“SUCCESS
”状态
我正在使用 MVVM
架构 (Activity - ViewModel
),并且在 Activity
中我保留了 Billing Client 库(因为该库需要一个 Context
) 和 ViewModel
业务逻辑。
看起来 Google 不希望我们将计费客户端库 "bind" 到 activity/viewmodel 中,而是在 Service
中使用它并在中实例化它Application
class。可能与 Observers
或 BroadcastReceivers
沟通并收听购买更新。一旦 Purchase
被验证或被拒绝,我应该更新用户的个人资料。这已经会导致问题,因为如果没有不可关闭的粘性通知,我无法启动 Service
,因为这是一个前台服务,我应该通知用户该应用程序在 运行背景。这会吓坏用户的。
这个新的购买流程打破了很多东西。这不应该是异步的。在现实生活中,当我买东西时,我把钱交给收银员,然后我在 5 分钟后收到 product/service!我该如何处理?用户购买,那么我通知用户he/she 会在Google确认后5分钟内拿到商品?这应该是瞬时的。
您如何处理应用内购买?
答案很简单。告诉用户购买请求已发生,但付款或请求尚未确认或处理。
这种情况应该而且必须是异步的,因为它可能发生在某些场景中,并且正是现实生活中发生的情况,例如当用户使用非即时支付方式时。某些付款方式可能需要数天才能处理 - 并非每个人都使用 credit/debit 卡或礼品卡进行在线支付,也不是每个人都可以!例如,在巴西有 Boleto 支付系统,支付简单但处理时间长。人们为他们的物品付款,打印收据,然后在某些地方排队付款。之所以这样做,是因为办一张国际在线卡非常困难,尤其是在非常贫穷的人群中。
因此,您需要做的是购买新商品。检查其状态。如果成功,则您的付款已完成并告诉用户。如果是PENDING,则告诉用户支付请求已经完成,正在等待Google的支付确认。
如果您在 PENDING 状态下购买,当付款结清时,您将通过您的应用程序流程收到新的购买请求,但这次它会说购买成功。
如果这不适合您当前的架构,那么您必须更改您的架构。
我可能会迟到,但希望对您有所帮助。我的情况是响应代码 5 无效令牌。成功确认后尝试使用订阅产品时出现此错误。我错误地区分了哪些需要食用哪些不需要。
我添加了最新的 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天的时间消费或确认购买,否则将被退款。
但是如果他们不允许我在购买后立即购买,我应该如何消费或确认购买?
- 我没有服务器,consumption/acknowledge应该在手机上制作
- 我无法让用户在应用程序中保持加载进度 dialog/view 而购买将被验证(获得
SUCCESS
状态。使用测试帐户,在 5 - 6 分钟内我正在通过onPurchasesUpdated(billingResult: BillingResult?, purchases: MutableList<Purchase>?)
) 获得新的“
SUCCESS
”状态
我正在使用 MVVM
架构 (Activity - ViewModel
),并且在 Activity
中我保留了 Billing Client 库(因为该库需要一个 Context
) 和 ViewModel
业务逻辑。
看起来 Google 不希望我们将计费客户端库 "bind" 到 activity/viewmodel 中,而是在 Service
中使用它并在中实例化它Application
class。可能与 Observers
或 BroadcastReceivers
沟通并收听购买更新。一旦 Purchase
被验证或被拒绝,我应该更新用户的个人资料。这已经会导致问题,因为如果没有不可关闭的粘性通知,我无法启动 Service
,因为这是一个前台服务,我应该通知用户该应用程序在 运行背景。这会吓坏用户的。
这个新的购买流程打破了很多东西。这不应该是异步的。在现实生活中,当我买东西时,我把钱交给收银员,然后我在 5 分钟后收到 product/service!我该如何处理?用户购买,那么我通知用户he/she 会在Google确认后5分钟内拿到商品?这应该是瞬时的。
您如何处理应用内购买?
答案很简单。告诉用户购买请求已发生,但付款或请求尚未确认或处理。
这种情况应该而且必须是异步的,因为它可能发生在某些场景中,并且正是现实生活中发生的情况,例如当用户使用非即时支付方式时。某些付款方式可能需要数天才能处理 - 并非每个人都使用 credit/debit 卡或礼品卡进行在线支付,也不是每个人都可以!例如,在巴西有 Boleto 支付系统,支付简单但处理时间长。人们为他们的物品付款,打印收据,然后在某些地方排队付款。之所以这样做,是因为办一张国际在线卡非常困难,尤其是在非常贫穷的人群中。
因此,您需要做的是购买新商品。检查其状态。如果成功,则您的付款已完成并告诉用户。如果是PENDING,则告诉用户支付请求已经完成,正在等待Google的支付确认。
如果您在 PENDING 状态下购买,当付款结清时,您将通过您的应用程序流程收到新的购买请求,但这次它会说购买成功。
如果这不适合您当前的架构,那么您必须更改您的架构。
我可能会迟到,但希望对您有所帮助。我的情况是响应代码 5 无效令牌。成功确认后尝试使用订阅产品时出现此错误。我错误地区分了哪些需要食用哪些不需要。