使iOS App保持活动状态以使用MQTT协议

时间:2014-11-05 16:58:48

标签: ios iphone mqtt

对于项目,我需要许多客户订阅不同的硬件设备。在此设置中,客户端是iOS - 设备。硬件就像一个覆盆子pi,但我不认为这很重要。如果硬件设备测量某种信息,则它会发送信号。这是一个罕见的事件,可能永远不会发生。

应用程序的目的是在某些事件出现在他感兴趣的位置时警告用户。

我计划使用MQTT协议实现这一点。

这就是我的问题所在。要使用MQTT,即使应用程序处于后台,应用程序也需要每隔几分钟发送一次PINGREQ。该应用程序还需要接收订阅并立即处理它们。

这是我打算做的事情:

  1. 将Info.plist中的“UIBackgroundModes”键设置为“voip”。
  2. 将套接字标记为voip套接字以在收到某些内容时唤醒应用
  3. 设置keepAliveTimer:callback:并发送PINGREQ
  4. ..如here所述

    我的问题是:Apple会允许吗?我的应用程序不是VoIP应用程序。如果不是,这种方法还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

如果Apple政策不允许您在后台运行您的MQTT客户端应用程序,那么解决方案应该是实现额外的推送服务。

推送服务订阅您的MQTT代理并向您的移动设备发送推送通知,以便他们运行或不运行MQTT客户端应用程序,他们将获得事件。

答案 1 :(得分:0)

是的! 当您使用VOIP时(即使您的应用程序不是VOIP应用程序),苹果有可能拒绝您的应用程序,以保持应用程序的活力! 我正在使用位置服务,这是一种在后台模式下保持应用程序活跃的正确解决方案。

即使应用程序处于后台模式&在获得允许回拨后,将您的位置管理员所需的准确度设置为最差,距离过滤器为99999(表示如果用户从上次位置更新回拨中超过99999米,将通知您的应用)

通过改变所需的精度和距离滤波器,您可以节省用户的电池消耗,否则您的应用会耗费大量能源

这是让您的应用程序在后台连续运行超过2天的正确方法(已在我们的项目中使用)。

HTH!享受编码乐趣:)。