问题标签 [wkrefreshbackgroundtask]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 使用 Swift 3 和后台任务更新复杂性
对于 watchOS 3,Apple 建议使用WKRefreshBackgroundTask
而不是使用getNextRequestedUpdateDate
.
如何使用新方法确定两次更新之间的时间?
我只会将我的数据请求(来自 url)侵入getCurrentTimelineEntry
并更新复杂性,但我认为这并不是 Apple 真正推荐的。
一个简短的代码示例将是一个很大的帮助。
watchkit - reloadTimeline() 不会更新并发症
我正在尝试制作一个 watchOS 3 应用程序,并且我想在后台任务中更新我的并发症。
首先,我在后台任务中从服务器获取新数据handle()
。之后,我通过调用来更新我的活跃并发症complicationServer.reloadTimeline(for:)
。
在控制台中,我确实看到了消息“UPDATE COMPLICATION”,因此代码被执行。
然而重新加载后,并发症仍然显示旧数据。如果我切换表盘并切换回来,那么复杂功能有时会重新加载。我是否必须做其他事情才能从后台任务重新加载并发症?
ios - 使用 WatchOS 2 的现有 Glance 屏幕作为 WatchOS 3 的手表应用程序的快照
我有一个 Apple WatchOS2 应用程序,我需要将其升级到 WatchOS 3。由于 WatchOS 3 上不再有概览屏幕,我不确定如何通过调用 WKSnapshotRefreshBackgroundTask 中的 scheduleSnapshotRefresh 方法来使用当前概览屏幕创建自动快照。我可以将整个项目从 WatchOS 2 目标迁移到 WatchOS 3 目标并应用更改以使其与 WatchOS 3 兼容吗?
watchos-2 - 要添加 WatchOS 3 快照功能,永远不会触发 handleBackgroundTasks 和 scheduleSnapshotRefreshWithPreferredDate
我需要添加要放置在 Dock 中的手表应用程序的快照,因为它是一项新功能,我找不到任何资源来指导我。我已经阅读了 Apple 的文档https://developer.apple.com/library/prerelease/content/samplecode/WatchBackgroundRefresh/Introduction/Intro.html并且我已经根据 Apple 文档在 Watch 应用程序的主 InterfaceController 中实现了此代码: https://developer.apple.com/library/prerelease/content/samplecode/WatchBackgroundRefresh/Introduction/Intro.html 但从未调用过handleBackgroundTasks。难道我做错了什么?我可以将另一个 InterfaceController 而不是主 InterfaceController 的屏幕截图放在 Dock 中吗?如何?
swift - watchOS 3 应用程序似乎在后台被随机杀死
我升级了 watchOS 应用程序以支持新的 watchOS 3 后台模式。大多数时候工作得很好。但更常见的是,我喜欢它被 watchOS 杀死,报告如下:
它经常发生在大约。我最后一个命令运行后 30 秒(根据我的日志),但有时也更早,但几乎总是在我的任务完成之后。我也确实正确地完成了任务task.setTaskCompleted()
(或者至少我是这么认为的)。
似乎有些东西阻止了应用程序被报告为“我完成了”,但我不知道是什么。有人知道它可能是什么吗?我很乐意提供更多信息,但我不知道从哪里开始,因为这个问题并不是真正可重现的。只是这种情况发生得太频繁了。
如果它很重要,我会使用带有后台会话的 NSURLDownloadSessionTask 来下载数据,但这似乎在大多数情况下都能正常运行并完成(当然,网络错误除外,但这与应用程序的终止没有关联)
编辑:
经过大量调试,我似乎知道更多,但仍然没有结论
发生的情况是,当我的应用程序变为活动状态时,它会通过 NSURLDownloadSessionTask 后台会话请求新数据。它还询问当前位置。所有这些都可能需要相当长的时间(总共最多 20 秒)。所以,当我现在离开应用程序时,这些任务可能仍然在后台运行。似乎也可以正常工作,因为我可以使用的后台时间约为。30秒。
但是当我在这些任务完成之前关闭应用程序,然后 WKSnapshotRefreshBackgroundTask 进入,我等到任务完成并发送 .setTaskCompleted()。但在这种情况下,该应用程序似乎永远不会自行暂停。在这种情况下,ViewController 的 willDisappear 和 didDeactivate 都不会被调用,并且应用程序会在 30 秒后被上述报告杀死。
当一个常规的 WKSnapshotRefreshBackgroundTask 在没有运行的情况下进入时,一切正常,并且只要我调用 .setTaskCompleted 就会执行 willDisappear
我不知道,为什么在第一种情况下 willDisappear 没有被调用。看起来该应用程序正在等待完成某些事情,但是什么也没有,afaik。而且我也不用这些任务更新界面,只是更新模型。
ios - WatchOS 3 WKApplicationRefreshBackgroundTask didReceiveChallenge
我终于(忽略了在“收到应用程序任务,启动 URL 会话”之后从未见过的示例代码)设法让我的 WatchOS3 代码启动后台 URL 会话任务,如下所示:
但是,我现在看到的问题是我的委托方法
urlSession:task:didReceiveChallenge:
永远不会被击中,所以我无法完成下载。(我还添加了会话级别的 urlSession:didReceiveChallenge: 委托方法,它也没有被击中)。
相反,我立即点击了task:didCompleteWithError:
有错误的委托方法:
“此服务器的证书无效。您可能正在连接到假装的服务器......这可能会使您的机密信息面临风险。”
有没有人得到后台监视更新来处理didReceiveChallenge
在后台 URL 会话期间点击该方法的额外要求?
感谢您提供任何帮助或建议。
watchkit - 尝试在 watchOS 中进行后台刷新时未调用 WKURLSessionRefreshBackgroundTask
我正在研究从 Web 服务获取预定数据的复杂性。每 20-30 分钟(或手动),我安排一个 WKRefreshBackgroundTask 来执行此操作。
正如 Apple 所建议的,我希望操作系统通过 background 处理这些数据的获取NSURLSession
。
这是我用来下载所需数据的功能:
关于这个的一些事情:
- 当我安排它时,它会被调用。我在控制台中看到了它的打印语句。
- 这与苹果的例子几乎相同。
- 我省略了网址。相同的 URL 在 iOS/watchOS 应用程序中运行良好,因此没有任何问题。
问题是,即使我正在调用resume()
任务并允许它在完成时唤醒我的应用程序,它似乎也没有这样做。
完成后,它应该返回到 WKExtensionDelegate 处理程序:
作为WKURLSessionRefreshBackgroundTask
,但事实并非如此。
我的代码与 Apple 的示例代码相同,然后创建另一个会话,但通过WKURLSessionRefreshBackgroundTask
' 标识符重新加入它。这是设置委托以处理下载数据的位置。检查代码:
但再一次,它似乎永远不会回来。尽管代码与 Apple 的该项目的示例代码相同,但我似乎无法弄清楚为什么这会起作用:WatchBackgroundRefresh: Using WKRefreshBackgroundTask to update WatchKit apps in the background。
我的项目中是否有一些我缺少的设置?我将所有这些代码放在ExtensionDelegate
watchOS 3 中的新代码中。我也符合WKExtensionDelegate
和URLSessionDownloadDelegate
。
提前感谢您的帮助!
swift3 - 当 WKExtension.scheduleBackgroundRefresh 应该调用 scheduleCompletion 处理程序?
我正在尝试使用这样的行来安排后台任务:
在哪里
根据文件:
scheduledCompletion
后台应用刷新任务完成后系统调用的块。
但由于未知原因,在安排后台刷新任务后立即调用它。后台刷新任务在正确的时间被调用,tho,并且scheduledCompletion
在那之后没有被调用。
那么这是文档中的错误,WatchKit 中的错误还是我做错了什么?
ios - WKRefreshBackgroundTask 不起作用
我正在尝试让我的手表应用程序在后台模式下运行。为了开始这样做,我复制了这个苹果指南中的例子:
但它根本不起作用。这是我的代码:
它打印成功调度的后台任务,使用皇冠将应用程序发送到后台并等待 handle:BackgroundTasks 触发,然后我将应用程序发送到后台但从未进入处理方法。
有什么帮助吗?!谢谢!!!
wcsession - watchOS 后台任务在 setTaskCompleted 上崩溃
在我的手表扩展委托init
函数中,我在以下位置设置了 KVO 观察者WCSession
:
为了完成所有的watch后台任务,这里调用了函数
和
通常,这可以正常工作。
但是,我在以下日志中崩溃了:
显然,在其中一项任务 setTaskCompleted
中调用时会发生崩溃。WKRefreshBackgroundTask
但是可能是什么原因,或者如何调试呢?