WatchOS应用程序在前景时处理推送通知



我正在构建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。

最新更新