问题描述
这是我所拥有的方法:
public void setupBillingClient() { //connect to google play
billingClient = BillingClient.newBuilder(context)
.enablePendingPurchases()
.setListener(this)
.build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
//The BillingClient is setup successfully
loadAllSkus();
}
}
@Override
public void onBillingServicedisconnected() {
//Todo: implement retry logic to handle lost connections to Google Play by calling startConnection() again
}
});
}
Google说我应该“实施重试逻辑”,但没有说如何。我以为可能只是在setupBillingClient()
内部调用onBillingServicedisconnected()
,但有人说这会导致崩溃。同样,我觉得如果那是那么简单,那么Google会告诉我们编写该代码,而不是模糊的指令来实现重试逻辑。
解决方法
我也遇到了这个问题。 Google 关于此的文档只是一团糟(好吧,就像 API 本身一样)。
所以,here 谷歌说
要实现重试逻辑,请覆盖 onBillingServiceDisconnected() 回调方法,并确保 BillingClient 调用 startConnection() 方法在制作之前重新连接到 Google Play 进一步的请求。
这意味着在断开连接后我们必须手动调用 startConnection
。
但是 here 谷歌说
调用以通知与计费服务的连接丢失。
注意:这不会删除计费服务连接本身 - 对服务的这种绑定将保持活动状态,您将收到 计费服务时调用 onBillingSetupFinished(BillingResult) 下一次运行,设置完成。
在我看来,这完全与之前的陈述相矛盾。
根据我对计费库的经验,我相信最后一种说法更有可能是正确的。不过我不是 100% 确定。
但我可以确认我在 logcat 中看到了一条断开连接消息,然后是另一条消息,表明计费客户端已准备就绪。不过我没有做任何重启操作。此外,如果我尝试在断开连接回调中 startConnection
,那么我开始在每次连接/断开连接时在 logcat 中收到两条消息。
基于此,我可以说:
- 您可以转到 here 并点击页面底部的“无用”。或者在 Twitter 上标记他们,或者在他们的跟踪器上创建问题。
- 我们正在讨论的重试逻辑与连接重试无关。即将重试我们尝试使用计费客户端执行的操作,但由于断开连接而无法工作。