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

时间:2016-03-16 08:05:31

标签: ios push-notification mqtt ios-mqtt-client-framework

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

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

但我有一些问题,我找不到任何直接答案。

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

  • 每次您的应用程序开始执行时,您需要使用MQTT客户端框架连接到您的服务器,MQTT客户端框架中没有可用的自动连接机制。我建议在特定控制器中编写init连接,该控制器会在应用启动后立即执行,但与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场景?

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

    - (void)connected:(MQTTSession *)session
    

快乐编码:)

答案 1 :(得分:1)

1)项目 - >能力 - >背景模式。有一些选项可以让您的应用在后台运行。

2)一般来说,如果允许你的应用程序在后台运行,MQTT将不会与服务器断开连接,但我认为你最好检查连接,并在应用程序变为活动状态时重新连接MQTT到你的服务器试。

AppDelegate-> - (void)applicationDidBecomeActive:(UIApplication *)application;

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

4)我无能为力。

答案 2 :(得分:0)

关于你的第一个问题:

可以在here找到有关如何在iOS后台运行的详细信息。此链接还列出了Apple允许在后台运行的操作,如果您的应用程序不符合这些条件,那么Apple可能会将其从应用程序商店中抛出。

该列表还显示要放在Info.plist中的UIBackgroundMode,以标记您的应用需要后台访问权限。

其他3我无法帮助