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 到您的当应用程序再次激活时服务器。
AppDelegate-> - (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
编码愉快:)
我正在尝试通过 MQTT-Client-Framework 连接到我们的推送服务器。
连接到服务器并不复杂,只需几行代码我就可以连接到服务器并订阅主题。
但我有几个问题,我无法为他们找到任何直接的答案。
1) 如何让我的客户端 运行 处于后台?
2) 设备重启后会发生什么?如何在设备重启后自动连接到服务器?
3)假设我在连接服务器时出错。这个库会尝试循环连接吗?尝试了多少次?还是我需要自己管理?
4) 订阅主题的同3场景?
第一个问题:
有关如何在 iOS 后台 运行 的详细信息,请参见 here。此 link 还列出了 Apple 允许在后台 运行 执行的操作,如果您的应用程序不符合这些条件,那么它很可能会被 Apple 从应用程序商店中删除。
该列表还显示要在您的 Info.plist 中放置哪些 UIBackgroundModes 以标记您的应用需要后台访问。
其他 3 个我帮不上忙
1)项目->功能->后台模式。有一些选项允许您的应用在后台 运行。
2)一般来说,如果您的应用程序允许在后台 运行,MQTT 将不会断开与服务器的连接,但我认为您最好检查一下连接,也许重新连接 MQTT 到您的当应用程序再次激活时服务器。
AppDelegate-> - (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
编码愉快:)