您应该在onBillingServiceDisconnected中添加什么?

问题描述

这是我所拥有的方法

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 中收到两条消息。

基于此,我可以说:

  1. 您可以转到 here 并点击页面底部的“无用”。或者在 Twitter 上标记他们,或者在他们的跟踪器上创建问题。
  2. 我们正在讨论的重试逻辑与连接重试无关。即将重试我们尝试使用计费客户端执行的操作,但由于断开连接而无法工作。