在后台模式下定时发送 iOS HTTP 请求

4

我正在为我的应用程序开发一个很好的功能,需要定期在后台发送HTTP请求。

我已经阅读了许多文章和讨论,但没有找到解决方案,因为我在stackoverflow.com上遇到的所有建议只是部分地解决了问题。

让我详细说明一下我的应用程序需要做什么。

考虑有一个带有API的网站,我想定期发送请求(当应用程序处于后台模式时)以检查网站上数据的状态。如果数据的状态可接受,我将向用户发送推送通知,通知他目前的数据是正确的。

是否有人可以提出如何在iOS应用程序中实现这个想法的解决方案?


请检查预取特性: https://developer.apple.com/reference/uikit/uitableview/1771763-prefetchdatasource。 - Max Pevsner
@MaxPevsner 谢谢,但在我看来,这种方法绝对不适用于这种情况。我需要一些与工具无关的“软件设计”答案。 - user3524337
静默推送通知一旦在设备上接收到,您可以执行一些任务。完全的后台模式仅适用于特定功能。https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html - Andrea
2个回答

5
在iOS上,你无法像你描述的那样做。当你的应用程序在后台或未运行时,你不能安排任务以定期发生。你也不能控制iOS决定何时终止你的应用程序,因此“未运行”是一个你需要处理的情况(你不能一直在后台运行)。
不过,我不确定服务器端的事情。如果你的服务器正在处理数据直到其可接受,并且它可以发送推送通知,为什么需要等待来自手机的请求呢?为什么不在数据准备好时就发送推送?如果应用程序决定什么是“可接受”的,也许让应用程序告诉服务器它想要什么,这样服务器就知道何时发送推送。
有几种选项可以接近你所描述的内容。如果你在应用程序中实现了“后台获取”功能,iOS将在应用程序未运行时启动它,并允许它在后台进行网络调用。虽然没有保证会发生多久,但这在Apple's background execution docs中有描述。
另一个选项是“静默”推送通知。如果您的服务器发送了这样的通知,iOS 可以在后台启动应用程序来处理通知。如果需要,应用程序可以进行网络调用。您可以在任何时间发送这些通知,但苹果公司警告不要过度使用:

静默通知不应作为使应用程序在后台保持唤醒状态的方法,也不应用于高优先级更新。APNs 将静默通知视为低优先级,如果总数过多,可能会完全限制其传递。实际限制是动态的,可以根据情况改变,但请尽量不要每小时发送超过几个通知。

静默推送在苹果的推送通知文档中有描述。

谢谢您提供这么详细的解释!问题在于我没有自己的服务器——我只能发送请求到服务端并获取响应。 - user3524337

0

iOS后台执行限制

问题

如何让我的应用程序在后台持续运行?

如果我安排一个计时器,如何在屏幕锁定时触发它?

如何每15分钟在后台运行代码?

如何设置在后台运行的网络服务器?

当我的应用程序处于后台状态时,如何为另一个应用程序提供IPC服务?

苹果公司的答案:

对所有这些问题的简短回答是:你不能。iOS对后台执行设置了严格的限制。其默认行为是在用户将应用程序移到后台后不久暂停您的应用程序;此暂停会阻止进程运行任何代码。

官方: https://developer.apple.com/forums/thread/685525


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接