繁体   English   中英

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

[英]Keep iOS App alive to work with MQTT protocol

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

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

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

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

这就是我打算做的事情:

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

..描述这里

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

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

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

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

即使应用程序处于后台模式并且在获得允许回拨后,请求权限使用位置服务,将您的位置管理器所需的准确度设置为最差,距离过滤器为99999(意味着如果用户距离超过99999米,您的应用程序将会收到通知最后的位置更新回电)

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

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

HTH! 在编码中玩得开心:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM