2014-11-05 35 views
3

对于一个项目,我需要许多客户端来订阅不同的硬件设备。在这个设置中,客户端是iOS设备。硬件就像一个树莓派,但我认为这不重要。如果硬件设备测量某种信息,则发送信号。这是一件罕见的事情,可能永远不会发生。使iOS应用程序保持活动状态以使用MQTT协议

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

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

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

这是我打算做的事:

  1. 将 “UIBackgroundModes” 键在Info.plist中为 “VOIP”。
  2. 马克插座为VOIP插座,当它接收的东西
  3. 将keepAliveTimer唤醒应用:回调:与发送PINGREQ

..描述here

我的问题是:请问苹果允许这个?我的应用程序不是一个VoIP应用程序。如果否,那么这种方法是否有其他选择?

+1

只有苹果公司可以肯定地说,但我认为很可能你的应用程序将被拒绝,因为它不是一个VoIP应用程序。关于SO的许多问题,人们因未正确使用已声明的背景模式而被拒绝。更好的方法是在事件发生时让服务器向设备发送推送通知。 – Paulw11 2014-11-05 20:24:51

+0

这里的问题是,立即通知用户至关重要。我多次阅读推送通知可能会延迟。另外,苹果公司并不保证推送通知是完全交付的。 – 2014-11-13 14:54:19

+0

确实如此,它不能保证传递,但在iOS上,如果应用程序不在前台,那么您无法保证它也会执行。 iOS设备与通用计算机不同。它的设计是为了让用户第一,并最大限度地延长电池的使用寿命 – Paulw11 2014-11-13 19:30:37

回答

2

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

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

0

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

问权限才能使用定位服务,即使在后台模式&应用得到允许回拨后,设定自己的位置经理所需的精度最差,距离过滤到99999(也就是说,如果用户旅行时,您更多的应用程序将被通知不是从最后位置更新回调)

99999米乘改变所需的精度和距离的过滤器,你可以保存用户的电池消耗,否则你的应用程序会消耗大量的能源

的这是使一个适当的方式你应用程序连续运行2天以上(已在我们的项目中使用)。

HTH!在编码:)玩得开心

+0

有关这方面的任何官方文档? – 2016-10-19 16:47:53

相关问题