问题标签 [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.

0 投票
1 回答
4076 浏览

swift - 使用 Swift 3 和后台任务更新复杂性

对于 watchOS 3,Apple 建议使用WKRefreshBackgroundTask而不是使用getNextRequestedUpdateDate.

如何使用新方法确定两次更新之间的时间?

我只会将我的数据请求(来自 url)侵入getCurrentTimelineEntry并更新复杂性,但我认为这并不是 Apple 真正推荐的。

一个简短的代码示例将是一个很大的帮助。

0 投票
1 回答
1986 浏览

watchkit - reloadTimeline() 不会更新并发症

我正在尝试制作一个 watchOS 3 应用程序,并且我想在后台任务中更新我的并发症。

首先,我在后台任务中从服务器获取新数据handle()。之后,我通过调用来更新我的活跃并发症complicationServer.reloadTimeline(for:)

在控制台中,我确实看到了消息“UPDATE COMPLICATION”,因此代码被执行。

然而重新加载后,并发症仍然显示旧数据。如果我切换表盘并切换回来,那么复杂功能有时会重新加载。我是否必须做其他事情才能从后台任务重新加载并发症?

0 投票
1 回答
228 浏览

ios - 使用 WatchOS 2 的现有 Glance 屏幕作为 WatchOS 3 的手表应用程序的快照

我有一个 Apple WatchOS2 应用程序,我需要将其升级到 WatchOS 3。由于 WatchOS 3 上不再有概览屏幕,我不确定如何通过调用 WKSnapshotRefreshBackgroundTask 中的 scheduleSnapshotRefresh 方法来使用当前概览屏幕创建自动快照。我可以将整个项目从 WatchOS 2 目标迁移到 WatchOS 3 目标并应用更改以使其与 WatchOS 3 兼容吗?

0 投票
2 回答
1287 浏览

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 中吗?如何?

0 投票
0 回答
259 浏览

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。而且我也不用这些任务更新界面,只是更新模型。

0 投票
1 回答
2074 浏览

ios - WatchOS 3 WKApplicationRefreshBackgroundTask didReceiveChallenge

我终于(忽略了在“收到应用程序任务,启动 URL 会话”之后从未见过的示例代码)设法让我的 WatchOS3 代码启动后台 URL 会话任务,如下所示:

但是,我现在看到的问题是我的委托方法 urlSession:task:didReceiveChallenge:永远不会被击中,所以我无法完成下载。(我还添加了会话级别的 urlSession:didReceiveChallenge: 委托方法,它也没有被击中)。

相反,我立即点击了task:didCompleteWithError:有错误的委托方法:

“此服务器的证书无效。您可能正在连接到假装的服务器......这可能会使您的机密信息面临风险。”

有没有人得到后台监视更新来处理didReceiveChallenge在后台 URL 会话期间点击该方法的额外要求?

感谢您提供任何帮助或建议。

0 投票
2 回答
2934 浏览

watchkit - 尝试在 watchOS 中进行后台刷新时未调用 WKURLSessionRefreshBackgroundTask

我正在研究从 Web 服务获取预定数据的复杂性。每 20-30 分钟(或手动),我安排一个 WKRefreshBackgroundTask 来执行此操作。

正如 Apple 所建议的,我希望操作系统通过 background 处理这些数据的获取NSURLSession

这是我用来下载所需数据的功能:

关于这个的一些事情:

  1. 当我安排它时,它会被调用。我在控制台中看到了它的打印语句。
  2. 这与苹果的例子几乎相同。
  3. 我省略了网址。相同的 URL 在 iOS/watchOS 应用程序中运行良好,因此没有任何问题。

问题是,即使我正在调用resume()任务并允许它在完成时唤醒我的应用程序,它似乎也没有这样做。

完成后,它应该返回到 WKExtensionDelegate 处理程序:

作为WKURLSessionRefreshBackgroundTask,但事实并非如此。

我的代码与 Apple 的示例代码相同,然后创建另一个会话,但通过WKURLSessionRefreshBackgroundTask' 标识符重新加入它。这是设置委托以处理下载数据的位置。检查代码:

但再一次,它似乎永远不会回来。尽管代码与 Apple 的该项目的示例代码相同,但我似乎无法弄清楚为什么这会起作用:WatchBackgroundRefresh: Using WKRefreshBackgroundTask to update WatchKit apps in the background

我的项目中是否有一些我缺少的设置?我将所有这些代码放在ExtensionDelegatewatchOS 3 中的新代码中。我也符合WKExtensionDelegateURLSessionDownloadDelegate

提前感谢您的帮助!

0 投票
1 回答
2134 浏览

swift3 - 当 WKExtension.scheduleBackgroundRefresh 应该调用 scheduleCompletion 处理程序?

我正在尝试使用这样的行来安排后台任务:

在哪里

根据文件

scheduledCompletion后台应用刷新任务完成后系统调用的块。

但由于未知原因,在安排后台刷新任务后立即调用它。后台刷新任务在正确的时间被调用,tho,并且scheduledCompletion在那之后没有被调用。

那么这是文档中的错误,WatchKit 中的错误还是我做错了什么?

0 投票
2 回答
1533 浏览

ios - WKRefreshBackgroundTask 不起作用

我正在尝试让我的手表应用程序在后台模式下运行。为了开始这样做,我复制了这个苹果指南中的例子:

https://developer.apple.com/library/content/samplecode/WatchBackgroundRefresh/Listings/WatchBackgroundRrefresh_WatchKit_Extension_MainInterfaceController_swift.html#//apple_ref/doc/uid/TP40017295-WatchBackgroundRrefresh_WatchKit_Extension_MainInterfaceController_swift-DontLinkElementID_10

但它根本不起作用。这是我的代码:

它打印成功调度的后台任务,使用皇冠将应用程序发送到后台并等待 handle:BackgroundTasks 触发,然后我将应用程序发送到后台但从未进入处理方法。

有什么帮助吗?!谢谢!!!

0 投票
1 回答
825 浏览

wcsession - watchOS 后台任务在 setTaskCompleted 上崩溃

在我的手表扩展委托init函数中,我在以下位置设置了 KVO 观察者WCSession

为了完成所有的watch后台任务,这里调用了函数

通常,这可以正常工作。
但是,我在以下日志中崩溃了:

显然,在其中一项任务 setTaskCompleted中调用时会发生崩溃。WKRefreshBackgroundTask

但是可能是什么原因,或者如何调试呢?