我不确定如何最好地实现让我们的服务器知道我们的iPhone应用程序当前正在运行(即使在后台)。有几种不同的选择,但是对于Apple批准过程允许的内容以及最可靠的内容存在一些担忧。该应用程序确实能够在后台播放音乐,如果这会影响到Apple批准的内容。
第一个选项是通过简单的GET / POST以设定的间隔不断向服务器发送某种心跳;然而,关注的是这是否被允许作为后台任务。以非常迂回的方式可以说有必要进行回放,但我不确定这是否可以接受。如果服务器在一段时间内没有收到他们的消息,则会认为应用程序已不再运行。
第二个选项涉及使用状态通道套接字连接,并在用户进入和离开该通道时让服务器正好处理。使用此选项时,主要关注的是当应用程序在后台时,这样的套接字连接是多么可靠。同样,Apple是否允许这样做。在这种情况下,当应用程序死亡时,连接关闭,服务器知道应用程序未运行。
第三个选项可以与其他任何一个选项一起使用,但是可以使用某种APNS推送来查询手机是否已经死亡并让它回复一些数据让我们知道;然而,这似乎有点违反直觉,因为推送本身会唤醒应用程序。
欢迎任何其他建议或意见。
答案 0 :(得分:1)
不确定这应该是评论还是回答,但让我把这2美分放在这里。
首先,您能否进一步详细说明您的需求,因为如果您使用AVPlayer/AVPlayerItem
在后台播放音频,则会将您的内容网址移交给iOS,并会在必要时拨打电话回放运行时,您不需要了解应用程序的状态。
让我假设,无论出于何种原因,你想要实现的问题是:
当“未运行”时,您的应用可以处于3种状态
我。 暂停状态:您的应用程序未被终止,但它没有收到任何CPU时间来执行您的代码。
II。 被操作系统杀死:您的应用可以通过iOS终止以释放内存或任何其他资源。
III。 用户强行杀死:如果用户从应用切换器中刷出您的应用,则会被强制杀死。
现在,当您的应用未运行时,您无法查询,但您可以将其移至正在运行状态。您可以使用以下方法实现此转换(非详尽列表,但提及常用方法)
我。 后台获取:您可以将应用配置为定期调用,以便它可以与服务器同步并更新其状态。
II。 推送通知(APNS):您可以从服务器ping应用程序,以便iOS在短时间内(几秒钟)调用它来更新其状态。
III。 VOIP推送:如果您的应用程序是VOIP应用程序,您可以使用PushKit发送Silent Pushes,即使是Force-Killed Apps也会启动,上述两种方法都不会将应用程序转换为Running状态被用户杀害
以上几点可以帮助您制定整体策略,但不回答问题,“如何保持同步运行状态”
我。当您的应用程序正在运行(Forground / Background)时,您几乎可以执行任何公开记录的内容,您可以每分钟或每5秒调用一次URL,您需要担心设备上的UX而不是审批流程,(人员)如果他们在设置部分的顶级电池注水器中看到您的应用,则会删除应用
II。要在应用程序处于后台时进行HTTP调用,您可以查看Background URL Session,将HTTP调用卸载到另一个进程,以便即使应用程序被杀死也可以完成调用。
III。对于基于套接字的方法,请参考this technical note。主要问题是您不知道/不知道您的应用何时从正在运行转移到未运行状态。
IV。正如您所提到的,您的应用程序使用背景音频,如果用户播放音频并将应用程序置于后台,它将始终处于“正在运行”状态,在这种情况下,您可以使用Periodic Observer定期进行心跳调用正在播出。