[英]is there any way to Send HTTP Requests in Background Mode (iOS) Periodically?
[英]Send HTTP Requests in Background Mode (iOS) Periodically
我正在为我的应用程序开发一项很棒的功能,该功能需要在后台定期发送 HTTP 请求。
我已经在这里阅读了很多文章和讨论,但还没有提出解决方案,因为我在stackoverflow.com上遇到的所有建议都只能部分解决问题。
让我详细解释一下我希望我的应用程序做什么。
考虑有一个带有 API 的网站,我想定期发送请求(当应用程序处于后台模式时)以检查网站上的数据状态。 如果数据状态是可以接受的,我会向用户发送推送通知,通知他当前数据是正确的。
有人可以提出一个解决方案如何在 iOS 应用程序中实现这个想法吗?
正如你所描述的,在 iOS 上你不能这样做。 当您的应用程序处于后台或未运行时,您无法安排任务定期发生。 您也无法控制 iOS 在后台运行时是否决定终止您的应用程序,因此“未运行”是您需要处理的情况(您不能只在后台运行很长时间如你所愿)。
不过,我不确定我是否了解服务器端。 如果您的服务器正在处理数据直到它可以接受,并且它可以发送推送通知,为什么它需要等待来自电话的传入请求? 为什么不在数据准备好时发送推送? 如果应用程序决定什么是“可接受的”,也许让应用程序告诉服务器它想要什么,以便服务器知道何时发送推送。
有几个选项可以接近您所描述的。 如果您在应用程序中实现“后台获取”功能,iOS 将在应用程序未运行时启动该应用程序,并让它在后台进行网络调用。 但是,无法保证这种情况发生的频率。 这在Apple 的后台执行文档中有所描述
另一个选项是“静默”推送通知。 如果您的服务器发送其中之一,iOS 可以在后台启动应用程序来处理通知。 如有必要,该应用程序可以进行网络调用。 你可以在任何你喜欢的时间发送这些,但 Apple 警告不要过度发送:
静默通知并不是为了让您的应用在后台保持清醒,也不是为了高优先级更新。 APNs 将静默通知视为低优先级,如果总数过多,可能会完全限制其传递。 实际限制是动态的,可以根据条件更改,但尽量不要每小时发送超过几个通知。
Apple 的推送通知文档中描述了静默推送。
如果您的应用程序可以具有后台运行功能,那么您可以做一些事情。
Timer
(NSTimer)。HTTP
请求。例如:
Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(handleHTTPRequest), userInfo: nil, repeats: true)
func handleHTTPRequest() {
// fetch and change the state of data
}
另一种方法是让delegates
在发生某些事情时执行任务。 当您不想在固定时间间隔内执行时,您可以使用它。
iOS 后台执行限制
Questions
如何让我的应用程序在后台持续运行?
如果我安排了一个计时器,如何在屏幕锁定时触发它?
如何每 15 分钟在后台运行一次代码?
如何设置在后台运行的网络服务器?
我的应用程序如何在后台为我的另一个应用程序提供 IPC 服务?
Answer from Apple:
所有这些的简短答案是你不能。 iOS 对后台执行有严格的限制。 它的默认行为是在用户将其移至后台后不久暂停您的应用程序; 这种暂停会阻止进程运行任何代码。
Official:
https ://developer.apple.com/forums/thread/685525
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.