如何从 WatchOS 3 中的自定义通知操作中打开特定的视图控制器

Posted

技术标签:

【中文标题】如何从 WatchOS 3 中的自定义通知操作中打开特定的视图控制器【英文标题】:How to open a specific view controller from a custom notification action in WatchOS 3 【发布时间】:2016-10-14 17:50:36 【问题描述】:

我正在开发一个WatchOS3 应用程序,用户可以在其中接收带有自定义操作的本地通知。用户可以在通知上调用 2 个自定义操作,即选项 1 和选项 2。用户点击任一选项后,应用程序应启动到特定视图。

到目前为止,ExtenionsDelegate 中的此函数已正确处理通知操作:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 
    print("Tapped in notification")
    let identifier = response.actionIdentifier
    print(identifier)

    switch(identifier)
    case "option1":
        print("tapped option1")
    case "option2":
        print("tapped option2")
    default: break
    
    completionHandler()

这是我的主要InterfaceController 中定义通知类别的代码:

func actioncategories()  

    let option1 = UNNotificationAction(identifier: "option1", title: "Test Option 1", options: .foreground) //Button 1
    let option2 = UNNotificationAction(identifier: "option2", title: "Test Option 2", options: .foreground) //Button 2

    let actioncategory = UNNotificationCategory(identifier: "action_category", actions: [option1, option2], intentIdentifiers: []) 

    UNUserNotificationCenter.current().setNotificationCategories([actioncategory]) //setting actions & categories

现在,当点击 option1 或 option2 时,如何告诉我的应用程序启动到特定视图?

【问题讨论】:

【参考方案1】:

我找到了解决办法:

不要在 ExtensionsDelegate 中使用 func userNotificationCenter,而是在主界面控制器中使用 func handleAction(withIdentifier identifier: String?, for notification: UNNotification) p>

使用 presentController(withName: , context: ) 你可以打开一个特定的视图

代码(在 InterfaceController 中):

override func handleAction(withIdentifier identifier: String?, for notification: UNNotification) 
    print("Tapped in notification")
    print(identifier)

    switch(identifier)
    case "option1"?:
        print("tapped option1")
        presentController(withName: "Option1_Screen", context: "segue")
    case "option2"?:
        print("tapped option2")
        presentController(withName: "Option2_Screen", context: "segue")
    default: break
    

【讨论】:

以上是关于如何从 WatchOS 3 中的自定义通知操作中打开特定的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何获取所有应用程序的所有通知都运行自定义通知

如何在 Laravel 5.3 中添加自定义通知通道

如何使用 FCM 在 ios 推送通知中播放自定义通知声音

自定义通知,如 Inshorts

使用 FlutterFire 的 Firebase 自定义通知

在自定义通知中添加按钮操作