【发布时间】:2020-05-26 15:14:59
【问题描述】:
我有一个同时支持 iOS 和 watchOS 的应用。它们对存储在 iCloud 中的数据进行操作。我想做的是当 iCloud 服务器上的数据发生变化时在 Apple Watch 上接收通知,以便我可以更新并发症。
我正在尝试使用扩展委托中的applicationDidFinishLaunching 中的CKQuerySubscription 设置订阅。我也在WKExtension上打电话给registerForRemoteNotifications。
- 容器和记录类型正确,我的谓词是
TRUEPREDICATE - 我在私有数据库上操作
- 订阅保存过程(即
database.save(subscription))成功 - 远程通知注册过程成功(调用
didRegisterForRemoteNotifications) - 我在实际设备上运行,并且有断点确认一切设置正常,结果什么都没有出现
- 手表扩展设置了远程通知后台模式和推送通知功能
- 当我在手表上启动实际应用时,通过常规查询可以正常查询数据
问题是:
-
didReceiveRemoteNotification永远不会被调用
是否真的可以从 iCloud 获得推送通知,还是我应该放弃这个想法?
【问题讨论】:
-
您在解决这个问题上取得了进展吗?我遇到了同样的问题,并重新观看了有关该主题的 WWDC 2019 视频 (developer.apple.com/videos/play/wwdc2019/208),以确保我没有遗漏任何内容,但没有运气。我正在尝试像你一样使用
didRegisterForRemoteNotifications,尽管对于无声内容推送通知来说这不应该是必需的。 -
在之前的评论之后,我得到了它的工作,但它似乎不一致。而且我不知道如何为 CloudKit 通知提供并发症更新优先级。
-
经过进一步调查,watchOS 应用程序似乎在前台收到推送通知。我仍在测试以查看是否曾在后台收到它们(例如在下一次后台刷新时)。我希望有一种方法可以使用 PushKit 并以某种方式让 CloudKit 使用
PKPushType.complication发送通知,但似乎无法将 PushKit 与 CloudKit 一起使用,并且只能与您自己的服务器一起使用。 -
@gohnjanotis 我得出了相同的结论,即它仅在应用程序处于前台时才处于活动状态。目前,我正在使用 CloudKit 容器获取我在手表应用程序中显示的数据,但我也在使用 WatchConnectivity 从手机应用程序更新复杂功能。
-
在 developer.apple.com/forums/thread/126286 中查看 ppix 的答案
标签: ios swift push-notification watchkit cloudkit