您应该在“onBillingServiceDisconnected()”中放入什么?

Use*_*163 7 java android in-app-billing

这是我的方法:

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
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

谷歌说我应该“实现重试逻辑”,但没有说明如何实现。我想也许只是打电话setupBillingClient()进去onBillingServiceDisconnected(),但有些人说这会导致崩溃。另外,我觉得如果有那么简单,那么谷歌就会告诉我们这样写,而不是模糊的指令来实现重试逻辑。

Vic*_*old 6

我也遇到了这个问题。关于此的 Google 文档简直是一团糟(好吧,就像 API 本身一样)。

所以,谷歌在这里

要实现重试逻辑,请重写 onBillingServiceDisconnected() 回调方法,并确保 BillingClient在发出进一步请求之前调用 startConnection() 方法重新连接到 Google Play。

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

但谷歌在这里

打电话通知与计费服务的连接已丢失

注意:这不会删除计费服务连接本身 - 与服务的绑定将保持活动状态,并且当计费服务下次运行且设置完成时,您将收到对 onBillingSetupFinished(BillingResult) 的调用。

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

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

但我可以确认我在 logcat 中看到了一条断开连接消息,然后是另一条表明计费客户端已准备就绪的消息。但我没有执行任何重启操作。另外,如果我尝试startConnection在断开连接回调中,那么我开始在每次连接/断开连接时在 logcat 中收到两条消息。

基于此,我可以说:

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