MQTT-Client-Framework保持在后台运行

meh*_*dok 7 push-notification ios mqtt ios-mqtt-client-framework

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

连接到服务器没有复杂性,只需几行代码即可连接到服务器并订阅主题.

但我有几个问题,我找不到任何直接的答案.

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

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

3)假设我在连接服务器时遇到错误.这个库是否会尝试连接循环?尝试多少次?或者我需要自己管理?

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

Dip*_*ara 4

根据我对 MQTT 客户端框架的经验,以下是您的问题/疑问的答案。我希望它能澄清您的疑虑并帮助您继续前进。

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

  • 您不能让 MQTT 客户端在后台运行,因为 Apple 不允许任何应用程序在后台长时间运行。但如果您覆盖它,并不能保证您的应用程序将继续在后台运行。您可以在苹果文档中阅读有关后台执行支持的更多信息
  • 另请参阅github 上发布的给定框架的问题。

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

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

  • 如果您的代理服务器具有配置来跟踪单个用户/客户端的现有订阅,那么您不需要每次都订阅。
  • 否则每次您需要在成功连接时订阅同一主题。使用以下MQTTSessionDelegate方法进行订阅。

    - (void)connected:(MQTTSession *)session
    
    Run Code Online (Sandbox Code Playgroud)

快乐编码:)

  • 它们不会在后台保持连接,它们会为每条新消息发送“APNS”推送通知,通知用户有新消息。两者并行工作,它们通过 MQTT 以及通知服务发送消息。 (4认同)