【发布时间】:2021-10-19 19:36:28
【问题描述】:
我正在使用 Google 的帐单库 4。BillingClient.launchBillingFlow 的文档说:
启动应用内购买或订阅的计费流程。
它将显示 Google Play 购买屏幕。结果将通过
BillingClient.Builder.setListener(PurchasesUpdatedListener)设置的PurchasesUpdatedListener接口实现传递。
PurchasesUpdatedListener 被传递了一个包含响应代码的 BillingResult 对象。但是,launchBillingFlow 方法也返回一个BillingResult 对象。我的问题是,我需要在每个地方处理哪些响应代码?
我们可以说,文档不够清晰,而且似乎也有误。对于launchBillingFlow,它表示如果用户取消购买流程,该方法将返回带有BillingResponseCode.BILLING_CANCELED 代码的BillingResult。但是,我的实验表明,代码实际上是通过调用 PurchasesUpdatedListener.onPurchasesUpdated 传递的。
不幸的是,BillingClient 的源代码不可用,但我确实反编译了库模块。据我所知,对launchBillingFlow 的调用可以返回以下结果代码:
-
OK- 当流程成功启动时(并且向用户显示 Google 的购买屏幕)。 -
SERVICE_DISCONNECTED- 当BillingClient当前未连接到设备上的 Google Play 时。 -
SERVICE_TIMEOUT- 如果在尝试启动流程期间连接中断。 (我想我在某处读到过,如果在后台更新 Google Play,就会发生这种情况。) -
FEATURE_NOT_SUPPORTED- 在BillingFlowParams与BillingClient对象的当前配置不匹配的各种情况下。
在反编译的代码中似乎还有一个地方,来自 Google Play 计费服务的某些错误响应被捕获并返回到这里。有谁知道调用launchBillingFlow 可以返回哪些其他响应代码?
【问题讨论】:
-
其实调用
launchBillingFlow时可以忽略返回结果,这里的结果OK表示app开始购买成功。您应该关注传递给onPurchasesUpdated方法的结果。这是用户购买或取消或已拥有该项目时的最终结果... -
@CôngHải - 简单地忽略它似乎是不对的。从反编译的代码中可以清楚地看出,购买流程可能无法启动,我的代码应该知道何时发生这种情况,并根据失败的原因做出不同的反应。
-
奇怪的是,launchBillingFlow 不是模态的。因此 CANCELED 返回值没有意义。用户可能会看到对话框并按下后退按钮,但在此之前已经从 launchBillingFlow() 返回。我很难理解如何将这个新版本的计费库合并到我的应用程序中——因为对话框不是模态的,你无法知道用户是按下后退按钮还是继续。您不能从 onPurchasesUpdated 执行 UI 更改(也不知道它是否被取消)。
-
忽略我说的最后一部分。 USER_CANCELED 被发送到 onPurchasesUpdated() 并且您可以从那里处理 UI。
-
@cbn - 是的,这就是我的问题的重点。
launchBillingFlow返回时需要处理哪些结果代码,onPurchasesUpdated()中需要处理哪些代码?显然有一些重叠,但显然也有一些代码对每个上下文都是唯一的。文档只是列出了所有可能的返回码,没有区分哪些应该在哪里处理。
标签: android android-billing play-billing-library