- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定如何最好地让我们的服务器知道我们的 iPhone 应用程序当前正在运行(即使在后台)。有几种不同的选择,但对于 Apple 批准程序允许的以及最可靠的选项存在一些担忧。如果考虑到 Apple 批准的内容,该应用程序确实能够在后台播放音乐。
第一个选项是通过简单的 GET/POST 以设定的时间间隔不断向服务器发送某种心跳;然而,问题是这是否被允许作为后台任务。可以以一种非常迂回的方式争论回放是必要的,但我不确定这是否可以接受。如果服务器在设定的时间内没有收到他们的消息,它将假定该应用程序不再运行。
第二个选项涉及使用状态 channel 套接字连接,并让服务器只处理用户进入和离开该 channel 的时间。使用此选项时,主要关注的是当应用程序处于后台时,这样的套接字连接的可靠性如何。同样,Apple是否允许这样做。在这种情况下,当应用死机时,连接关闭并且服务器知道应用没有运行。
第三个选项可以与其他任何一个选项结合使用,但要使用某种 APNS 推送来查询手机是否已死亡,并让它以一些数据响应让我们知道;然而,这似乎有点违反直觉,因为推送本身会唤醒应用程序。
也欢迎任何其他建议或意见。
最佳答案
不确定这应该是评论还是回答,但让我把我的 2 美分放在这里。
首先,您能否进一步详细说明您的需求,因为如果您使用 AVPlayer/AVPlayerItem
在后台播放音频,您会将您的内容 URL 移交给 iOS,并且它将进行如下调用并且在需要保持播放运行时,您不需要知道应用程序的状态。
让我假设,无论出于何种原因,您想实现问题所要求的:
您的应用在“未运行”时可以处于 3 种状态
我。 暂停状态:您的应用没有被终止,但它没有获得任何 CPU 时间来执行您的代码。
二。 被操作系统杀死:您的应用可能会被 iOS 终止以释放内存或任何其他资源。
三。 Force Killed by User:如果用户从应用程序切换器向上滑动您的应用程序,它就会被强制终止。
现在,当您的应用未运行时,您无法查询它,但您可以将其移至正在运行状态。您可以使用以下方法来实现此转换(并非详尽列表,但提到了常见方法)
我。 后台获取:您可以将应用程序配置为定期调用,以便它可以与服务器同步并更新其状态。
二。 推送通知 (APNS):您可以从服务器对应用执行 ping 操作,以便 iOS 在短时间内(几秒钟)调用它来更新其状态。
三。 VOIP 推送:如果您的应用程序是 VOIP 应用程序,您可以使用 PushKit 发送静默推送,这甚至会启动强制终止的应用程序,如果强制终止,上述两种方法不会将应用程序转换为运行状态被用户杀死
上述观点有助于制定总体策略,但没有回答问题,“如何保持同步 RUNNING 状态”
我。当您的应用程序正在运行(前台/后台)时,您几乎可以执行公开记录的任何操作,您可以每分钟或每 5 秒调用一次 URL,您需要担心设备上的 UX 而不是审批流程,(人们如果他们在设置部分看到您的应用位于最耗电的位置,则会删除应用)
ii.要在应用程序处于后台时进行 HTTP 调用,您可以查看 Background URL Session ,它将 HTTP 调用卸载到另一个进程,以便即使应用程序被终止,调用也能完成。三.对于基于套接字的方法,请参阅this technical note .主要问题是您不知道/无法知道您的应用何时从正在运行状态转变为未运行状态。
四。正如您提到的,您的应用程序使用背景音频,如果用户播放音频并将应用程序置于后台,它将始终处于运行状态,在这种情况下您可以使用 Periodic Observer在播放内容时定期进行一些 Heartbeat 调用。
关于ios - 如果 iPhone 应用程序正在运行(心跳),则处理服务器知道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299498/
我是一名优秀的程序员,十分优秀!