提问人:Mohammad Yasir Perwez 提问时间:11/16/2023 最后编辑:Mohammad Yasir Perwez 更新时间:11/17/2023 访问量:44
iOS:从 BGAppRefreshTask 启动应用程序时访问互联网时出现问题 |BGProcessingTask(BGProcessing任务)
iOS : Issue in accessing internet when app is launched from BGAppRefreshTask |BGProcessingTask
问:
用例 :我们希望在应用程序处于后台时更新我们的应用程序内容。我们想从后端服务器(HTTP GET)下载一些json数据并更新应用程序的内容,以便下次用户启动应用程序时,他可以看到更新的内容。我们使用的是 Apple 的 BackgroundTasks 框架 API,特别是 BGAppRefreshTask 和 BGProcessingTask。相当标准
问题→通过 URLSession 的 HTTP 请求不起作用。
我们注册并调度 BGAppRefreshTask 和 BGProcessingTask。我们的应用程序由 iOS 在后台启动。但是当我们向 Web 服务器发出 HTTP 请求时,我们没有得到任何响应回调。 使用默认配置时,发出请求后,根本不会调用响应回调或 URLSessionDataDelegate 方法。(我也尝试过谷歌网址,只是为了确保问题不仅出在我们的后端)。 当我在调试时检查整个流程并且连接到 Xcode 并使用此命令触发后台启动时,一切都工作正常 e -l objc -- (无效)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@“com.background_cloud_sync_apprefresh”] 我有点被这个问题困住了,已经没有想法可以尝试了。 因此,如果您在 iOS 上遇到任何此类问题,我将在这里联系专家。
我尝试过带有回调和 URLSessionDataDelegate 的 URLSession。
更新:进一步的发现。我还发现,问题可能是调用后台执行的线程没有等待URLSession请求完成。我通过放置几个 1 秒线程睡眠来验证它,并为 URLSession 提供一个单独的队列以进行委托回调。 问:如何让后台执行等待其他异步任务完成。
答:
若要使应用程序继续在后台处理信息,需要将配置从默认值更新为:
let configuration = URLSessionConfiguration.background(withIdentifier:
"com.yourapp.bundleidentifier")
您可以在有关URLSession的非常好的教程中获得有关此内容的更多详细信息
评论