在iOS Swift中,应用程序发送到后台并收回后,如果请求保持打开状态30秒,则不会收到响应

问题描述 投票:0回答:2

在 Swift 中,我使用

urlsession
框架从 API 获取数据。我正在将请求添加到
operationqueue
中,并且在内部我正在执行一项操作以确保以 FIFO 格式启动。我发送了一个请求,后端收到请求后30秒才会响应。如果应用程序没有最小化,一切都可以正常工作。

如果我发送了请求,然后突然将应用程序发送到后台(而不是关闭),并且在 8-10 秒后如果我将应用程序带到前台,那么我就会收到响应。

由于我的应用程序不支持任何后台模式,这种行为是否是因为当我将应用程序发送到后台时请求以某种方式消失?

ios swift networking background
2个回答
0
投票

请检查后台获取是否已选中签名和功能


0
投票

如果您有一个需要超过 30 秒才能完成的请求(并且您的应用程序没有其他模式,例如导航或音频,可以使其在后台运行),您将需要使用“后台”

URLSession 
”。具体来说,使用
URLSessionConfiguration
 创建的 
background(withIdentifier:)
创建会话。有关一些注意事项的完整讨论,请参阅在后台下载文件文档。请注意,该文档重点介绍下载,但该想法也适用于上传(附加限制是您必须使用基于文件的上传任务,而不是基于
Data
的演绎版)。不过,数据任务不支持后台
URLSession


我知道这不适用于您的情况,但为了完整起见,我们应该注意,如果您有一个请求需要不到 30 秒的时间,并且您希望它在用户离开应用程序后继续,那么您可以使用标准

URLSession
,但随后使用
beginBackgroundTask
。这只会给你带来 30 秒的时间,但它的模式要简单得多。有关更多信息,请参阅为您的应用程序选择后台策略在后台继续前台工作部分。


请注意,虽然“后台获取”功能看起来很有希望,但这实际上解决了一个非常不同的问题(尽管其名称中也包含“后台”)。具体来说,“后台获取”允许应用程序在应用程序不在前台时定期获取数据。有关该模式的示例,请参阅使用后台任务刷新和维护您的应用程序。但如果请求时间超过 30 秒,您就必须再次使用后台URLSession

© www.soinside.com 2019 - 2024. All rights reserved.