[英]Receiving push notifications from iCloud on Apple Watch
我有一个同时支持 iOS 和 watchOS 的应用程序。 它们对存储在 iCloud 中的数据进行操作。 我想做的是在 iCloud 服务器上的数据发生变化时在 Apple Watch 上接收通知,以便我可以更新并发症。
我正在尝试在扩展委托的applicationDidFinishLaunching
中使用CKQuerySubscription
设置订阅。 我还在WKExtension
上调用registerForRemoteNotifications
。
TRUEPREDICATE
database.save(subscription)
)成功didRegisterForRemoteNotifications
)问题是:
didReceiveRemoteNotification
是否真的可以从 iCloud 获得推送通知,还是我应该放弃这个想法?
问题可能如下:
watchOS 确实可以处理静默推送通知,但很少发生推送,并且推送可能会被丢弃。 文档说:
系统将后台通知视为低优先级:您可以使用它们来刷新应用程序的内容,但系统不保证它们的交付。 此外,如果总数变得过多,系统可能会限制后台通知的传递。 系统允许的后台通知数量取决于当前情况,但不要尝试每小时发送超过两三个。
当设备收到后台通知时,系统可能会保留并延迟通知的传递,这可能会产生以下副作用: 当系统收到新的后台通知时,它会丢弃旧的通知,只保留最新的通知。
所以 iCloud 推送并不适合更新复杂功能。
如果不使用 iCloud 而是使用单独的服务器,则可以使用PushKit来更新并发症。 我觉得奇怪的是,Apple 没有为 iCloud 实现这个(还没有?)。
另请参阅我的问题和答案。
我的情况与@whistler 完全相同。 一切正常,为了在 watchOS 上接收远程通知,除了: didReceiveRemoteNotification
但我发现,通过请求用户通知的授权有助于更频繁地传递它们,但仍然没有传递所有通知,但至少更频繁地传递(而且似乎仍然只是在前台)。
简单地请求用户通知的授权:
try? await UNUserNotificationCenter.current().requestAuthorization(options: [.alert])
这似乎不会提示用户在 watchOS 上发出警报。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.