在watchOS应用程序处于前台时处理推送通知?
我正在构建iOS + watchOS应用程序,需要通过所有可能的iOS和Watch应用程序状态组合的更新信息通知用户:当iOS和watchOS都在前台运行时,当它们都在背景,并且当其中一个或另一个在后台时。在watchOS应用程序处于前台时处理推送通知?
我正在成功处理这四种情况中的三种情况的推送通知。我卡住的地方是手表应用程序在前台打开,但iOS应用程序在后台 - 我无法找到Watch Notification Controller,其ExtensionDelegate或iOS AppDelegate的任何方法,在这种情况下推送远程通知。
在iOS系统中的AppDelegate,该火灾时,通知推而iOS应用程序是在前台和观看的应用程序是在任一状态:
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
在WatchKit扩展NotificationController,该火灾时,一个通知推而iOS和观看的应用程序都在后台:
override func didReceive(_ notification: UNNotification, withCompletion completionHandler: @escaping (WKUserNotificationInterfaceType) -> Swift.Void) { ... }
然而,如果手表应用程序是在中脱颖而出地面和iOS应用程序在后台,当通知被推动时,通知横幅出现在iPhone上(即使屏幕被锁定),我发现没有办法处理它并更新手表,除非手表也是在那个时候的背景中。
任何想法?
想通了。要处理Watch应用程序处于后台和前台应用程序时的通知,您似乎必须在NotificationController的didReceive方法(用于后台通知)中实现方法,并使用willPresent方法(Extension forDevice)为ExtensionDelegate实现UNUserNotificationDelegate协议通知,而在前台):
func userNotificationCenter(_: UNUserNotificationCenter, willPresent: UNNotification, withCompletionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("willPresent fired from watch delegate")
}
了什么让我感到困惑的是,该文件说:
用户通知框架提供了一个统一的API为iOS中,watchOS和tvOS的应用程序,并且支持使用大多数与本地和远程通知相关的任务。这里是任务的一些例子,你可以用这个框架进行...
但是当他们经过这适用于iOS,tvOS和MacOS,该文档不指定究竟如何手表做到这一点。
通过注册和设备标识的步骤去,这在观看ExtensionDelegate没有必要(实际上是不可能的,因为你需要的UIApplication的模块,以做到这一点),但有必要调用:
UNUserNotificationCenter.current().delegate = self
启动ExtensionDelegate。