我正在构建iOS WatchOS应用程序,这些应用需要在iOS和观察应用程序状态的所有可能组合中通知用户更新信息:当iOS和WatchOS都在前景中运行时,当它们都在后台运行时,一个或另一个在后台时。
我正在成功处理这四种情况下三个情况的推动通知。我卡住的位置是在手表应用程序在前景中打开的时候,但是iOS应用在后台 - 我找不到任何手表通知控制器的方法在这种情况下推动了远程通知。
在iOS AppDelegate中,当iOS应用在前景中推动通知时,这将触发,并且观看应用在任何一个状态下都处于:
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
在watchkit扩展名通知controller中,当iOS和手表应用都在后台推动通知时,这会触发:
override func didReceive(_ notification: UNNotification, withCompletion completionHandler: @escaping (WKUserNotificationInterfaceType) -> Swift.Void) { ... }
然而,如果手表应用在前景中,并且iOS应用在后台时,当按下通知时,则通知横幅显示在iPhone上(即使屏幕锁定(,并且除非当时手表也处于后台,否则我没有找到处理它并更新手表的方法。
有什么想法?
弄清楚了这一点。要处理手表应用程序在后台和前景中的通知,似乎您似乎必须在Notification Controller中使用dodReceive方法(在后台时通知(和UnusernotificationDelegate协议中的ExtensiveDelegate中的ExtensiveDelegate中的dodReceive方法(用于使用遗嘱的方法(在前景中的通知(:
func userNotificationCenter(_: UNUserNotificationCenter, willPresent: UNNotification, withCompletionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("willPresent fired from watch delegate")
}
让我感到困惑的是文档说:
用户通知框架提供了用于iOS,WatchOS和TVOS应用程序中的统一API,并支持与本地和远程通知相关的大多数任务。以下是您可以使用此框架执行的任务的一些示例...
但是,当他们为iOS,TVOS和MACOS经历此过程时,文档并未确切指定该手表的方式。
通过注册和设备令牌步骤是在手表ExtensionDelegate中没有必要的(实际上是不可能的,因为您需要Uiapplication模块才能执行此操作(,但是是必要的:
UNUserNotificationCenter.current().delegate = self
启动ExtensionDelegate。