首页 > 解决方案 > 未关闭应用程序时未调用 WatchOS 后台 URLSession 句柄(_:)(降低手腕)

问题描述

我正在尝试创建一个 Watch-App 来下载数据(大约 30 MB)。

因此,我创建了一个具有如下背景配置的 URLSession:

let config = URLSessionConfiguration.background(withIdentifier: "<some-id>")
self.session = URLSession(configuration: config, delegate: self, delegateQueue: .main)

然后开始下载:

let request = URLRequest(url: "<some-url>", method: .GET)
self.task = session.downloadTask(with: request)
self.task.resume()

由于用户不会盯着手表看 5 分钟,我想在下载完成时通过一些触觉反馈通知他。因此,我想使用handle(_:)ExtensionDelegate 的功能。WKURLSessionRefreshBackgroundTask根据文档,下载完成时应该使用 a 调用它:

当发生以下任何事件时,系统会创建一个后台 URLSession 任务: 需要进行身份验证才能完成后台传输。与会话标识符关联的所有后台传输都已完成(成功或不成功)。https://developer.apple.com/documentation/watchkit/wkurlsessionrefreshbackgroundtask

仅当我关闭我的应用程序(按下表冠)时才调用此handle(_:)方法,而不是在我降低手腕锁定屏幕时调用。

我还注意到,如果我再看一下手表,回调urlSession(.. didWriteData ..)就不再起作用了。

我是否遗漏了什么,或者这甚至是预期的行为?我正在安装 WatchOS 5 的真正 Apple-Watch Series 4 上进行测试。

标签: watchkitapple-watchwatchwatchosnsurlsessiondownloadtask

解决方案


推荐阅读