对于一个项目,我需要许多客户端来订阅不同的硬件设备。在这个设置中,客户端是iOS设备。硬件就像一个树莓派,但我认为这不重要。如果硬件设备测量某种信息,则发送信号。这是一件罕见的事情,可能永远不会发生。使iOS应用程序保持活动状态以使用MQTT协议
该应用程序的目的是当某种事件出现在他感兴趣的位置时警告用户。
我计划使用MQTT协议来实现这一点。
这是我的问题所在。要使用MQTT,应用程序需要每隔几分钟发送一次PINGREQ,即使应用程序在后台也是如此。此外,应用程序需要收到其订阅并立即处理它们。
这是我打算做的事:
- 将 “UIBackgroundModes” 键在Info.plist中为 “VOIP”。
- 马克插座为VOIP插座,当它接收的东西
- 将keepAliveTimer唤醒应用:回调:与发送PINGREQ
..描述here
我的问题是:请问苹果允许这个?我的应用程序不是一个VoIP应用程序。如果否,那么这种方法是否有其他选择?
只有苹果公司可以肯定地说,但我认为很可能你的应用程序将被拒绝,因为它不是一个VoIP应用程序。关于SO的许多问题,人们因未正确使用已声明的背景模式而被拒绝。更好的方法是在事件发生时让服务器向设备发送推送通知。 – Paulw11 2014-11-05 20:24:51
这里的问题是,立即通知用户至关重要。我多次阅读推送通知可能会延迟。另外,苹果公司并不保证推送通知是完全交付的。 – 2014-11-13 14:54:19
确实如此,它不能保证传递,但在iOS上,如果应用程序不在前台,那么您无法保证它也会执行。 iOS设备与通用计算机不同。它的设计是为了让用户第一,并最大限度地延长电池的使用寿命 – Paulw11 2014-11-13 19:30:37