【问题标题】:What should you put in `onBillingServiceDisconnected()`?您应该在 `onBillingServiceDisconnected()` 中添加什么?
【发布时间】:2020-10-07 15:58:49
【问题描述】:

这是我的方法:

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(),但有些人说这会导致崩溃。另外我觉得如果它是那么简单,那么谷歌会告诉我们写这个而不是模糊的指令来实现重试逻辑。

【问题讨论】:

  • 您可以使用billingClient.startConnection(this);重试。
  • 另外,看看这个只重试有限的次数。 medium.com/shuttl/…
  • 我能找到的关于此事的唯一问题是这个,它说再次调用 startConnection() 会导致崩溃:stackoverflow.com/questions/63313049/…
  • 没有解决办法? :(
  • 我无法测试它。我的笔记本电脑模拟速度太慢,我已经在我唯一的安卓设备上测试了一次性购买。另外我不知道如何强制Android触发onBillingServiceDisconnected()

标签: java android in-app-billing


【解决方案1】:

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

所以,hereGoogle 说

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

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

但是hereGoogle 说

调用以通知与计费服务的连接丢失

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

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

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

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

基于此,我可以说:

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

【讨论】:

  • 您好,很抱歉很晚才回复。我丢失了我的帐户。你能举一个你在onBillingServiceDisconnected()方法中添加的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多