0

WatchOS3ユーザーがカスタム アクションでローカル通知を受け取るアプリケーションを開発しています。ユーザーには、オプション 1 とオプション 2 の通知で呼び出すことができる 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
}

オプション 1 またはオプション 2 のいずれかがタップされたときに特定のビューを起動するようにアプリケーションに指示するにはどうすればよいでしょうか?

4

1 に答える 1

0

私は解決策を見つけました:

  • ExtensionsDelegate でfunc userNotificationCenterを使用する代わりに、メイン インターフェイス コントローラーでfunc handleAction(withIdentifier identifier: String?, for notifications: UNNotification)を使用します。

  • 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
    }
}
于 2016-10-16T18:07:45.307 に答える