我正在尝试创建一个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分钟内用户不会凝视手表,因此我想在下载完成后通过一些触觉反馈通知他。
因此,我想使用ExtensionDelegate的handle(_:)
函数。根据文档,下载完成后应使用WKURLSessionRefreshBackgroundTask
进行调用:
发生以下任何事件时,系统都会创建后台URLSession任务: 必须进行身份验证才能完成后台传输。 与会话标识符关联的所有后台传输均已完成(成功或失败)。 https://developer.apple.com/documentation/watchkit/wkurlsessionrefreshbackgroundtask
仅当我关闭应用程序(按表冠)时,才调用此handle(_:)
方法,而当我放下手腕以锁定屏幕时,则不会调用该方法。
我还注意到,如果我再次看一下手表,urlSession(.. didWriteData ..)
的回调将不再起作用。
我是否缺少某些东西,或者甚至是预期的行为?我正在安装了WatchOS 5的真实Apple-Watch Series 4上进行测试。