您应该在 `onBillingServiceDisconnected()` 中输入什么?

What should you put in `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 说我应该“实现重试逻辑”但没有说明如何实现。我想也许只是在 onBillingServiceDisconnected() 中调用 setupBillingClient() 但有些人说这会导致崩溃。另外我觉得如果真的那么简单,那么 google 会告诉我们写那个而不是模糊的指令来实现重试逻辑。

我也 运行 关注这个问题。 Google 关于这个的文档简直是一团糟,(好吧,就像 API 本身)。

所以,here Google 说

To implement retry logic, override the onBillingServiceDisconnected() callback method, and make sure that the BillingClient calls the startConnection() method to reconnect to Google Play before making further requests.

这意味着断开连接后我们必须手动调用startConnection

但是hereGoogle说

Called to notify that the connection to the billing service was lost.

Note: This does not remove the billing service connection itself - this binding to the service will remain active, and you will receive a call to onBillingSetupFinished(BillingResult) when the billing service is next running and setup is complete.

在我看来,这与之前的说法完全矛盾。

根据我使用计费库的经验,我相信最后一个说法更有可能是正确的。不过我不是 100% 确定。

但我可以确认我在 logcat 中看到一条断开连接消息,随后是另一条消息,表明计费客户端已准备就绪。不过我没有做任何重启操作。此外,如果我尝试 startConnection 在断开回调中,然后我开始在 logcat 中收到两条消息 connection/disconnection.

基于此,我可以这样说:

  1. 您可以转到 here 并单击页面底部的“无帮助”。或者在 Twitter 上标记他们,或者在他们的跟踪器上创建问题。
  2. 我们正在讨论的重试逻辑与连接重试无关。即将重试我们尝试使用计费客户端执行的操作,但它没有成功,因为它已断开连接。