MQTT-Client-Framework 在后台停留 运行

MQTT-Client-Framework stay running at background

我正在尝试通过 MQTT-Client-Framework 连接到我们的推送服务器。

连接到服务器并不复杂,只需几行代码我就可以连接到服务器并订阅主题。

但我有几个问题,我无法为他们找到任何直接的答案。

1) 如何让我的客户端 运行 处于后台?

2) 设备重启后会发生什么?如何在设备重启后自动连接到服务器?

3)假设我在连接服务器时出错。这个库会尝试循环连接吗?尝试了多少次?还是我需要自己管理?

4) 订阅主题的同3场景?

第一个问题:

有关如何在 iOS 后台 运行 的详细信息,请参见 here。此 link 还列出了 Apple 允许在后台 运行 执行的操作,如果您的应用程序不符合这些条件,那么它很可能会被 Apple 从应用程序商店中删除。

该列表还显示要在您的 Info.plist 中放置哪些 UIBackgroundModes 以标记您的应用需要后台访问。

其他 3 个我帮不上忙

1)项目->功能->后台模式。有一些选项允许您的应用在后台 运行。

2)一般来说,如果您的应用程序允许在后台 运行,MQTT 将不会断开与服务器的连接,但我认为您最好检查一下连接,也许重新连接 MQTT 到您的当应用程序再次激活时服务器。

A​​ppDelegate-> - (void)applicationDidBecomeActive:(UIApplication *)application;

3) 不幸的是,是的,它会的。而且你必须管理好自己。

4)我没办法。

根据我在 MQTT 客户端框架方面的经验,以下是您 questions/queries 的答案。我希望它能澄清您的顾虑并帮助您继续前进。

1) 如何让我的客户端 运行 处于后台?

  • 您不能将 MQTT 客户端 运行 保留在后台,因为 Apple 不允许任何应用程序在后台长时间保留 运行。尽管如果您覆盖它,则不能保证您的应用程序将在后台保留 运行。您可以在 apple documentation.
  • 中阅读有关后台执行支持的更多信息
  • 另请参阅 github 上针对给定框架发布的 issue

2) 设备重启后会发生什么?如何在设备重启后自动连接到服务器?

  • 每次您的应用程序开始执行时,您需要使用 MQTT 客户端框架连接到您的服务器,MQTT 客户端框架中没有可用的自动连接机制。我建议在特定控制器中初始化您的连接,该控制器在您的应用程序启动后立即执行,但与 AppDelegate
  • 相同

3) 假设我在连接服务器时出错。这个库会尝试循环连接吗?尝试了多少次?还是我需要自己管理?

  • 如果您的 MQTT 客户端无法连接您的服务器,您需要自己处理,库不会像前面的回答中提到的那样尝试自动连接。我编写了如下示例代码。使用 NSTimer 自动连接到服务器。

    [self.mqttSession connectToHost:MQTT_HOST port:MQTT_PORT usingSSL:NO connectHandler:^(NSError *error)
    {
        if(error)
        {
            // Application fail to connect to server, write your code to auto connect here
        }
    }];
    

4) 订阅主题的同3场景?

  • 如果您的经纪人服务器配置为跟踪您现有的个人订阅users/client,那么您不需要每次都订阅。
  • 否则每次连接成功都需要订阅同一个主题。使用以下 MQTTSessionDelegate 方法订阅。

    - (void)connected:(MQTTSession *)session
    

编码愉快:)