3

iOS 10/Swift 3でURLを開いてローカル通知を処理しようとしています。通知のデフォルトアクションに割り当てられたURLとカスタムアクションボタンに割り当てられたURLがあります。通知アクションハンドラからURLを開くことができません

デフォルトの操作(通知自体をタップ)が発生すると、アプリはURLを正常に開きます。しかし、アクションボタンをタップすると、UNUserNotificationCenterDelegateハンドラが呼び出され、canOpenURLがtrueを返しますが、URLを開くための呼び出しは失敗します。

この問題は、通知がタップされたときにアプリがバックグラウンドまたは終了した場合にのみ発生します。アプリがフォアグラウンドにある場合、両方のケースが機能します。

また、私のアプリケーションデリゲートのapplication(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:])メソッドにブレークポイントがあります。これは、デフォルトアクションのためにヒットしますが、カスタムアクションはヒットしません。

カスタムアクションを処理するときに何か別の処理を行う必要がありますか?ここで

コードです:

func userNotificationCenter(_ center: UNUserNotificationCenter, 
           didReceive response: UNNotificationResponse, 
           withCompletionHandler completionHandler: @escaping() -> Void) { 
    switch response.actionIdentifier { 
    case UNNotificationDefaultActionIdentifier: 
     if let link = URL(string: "myapp://default"), 
        UIApplication.shared.canOpenURL(link) { 
        UIApplication.shared.open(link) { result in 
         print("open url result: \(result)") // this works! 
      } 
     } 

    case "customActionIdentifier": 
     if let link = URL(string: "myapp://custom"), 
        UIApplication.shared.canOpenURL(link) { 
        UIApplication.shared.open(link) { result in 
         print("open url result: \(result)") // this fails! 
      } 
     } 
    } 

    completionHandler() 
} 

答えて

4

私は最終的に問題を発見:UNNotificationActionを宣言するとき、あなたはオプションの配列でUNNotificationActionOptions.foregroundを含める必要があります。

+0

あなたは私の人生を保存しました:) –

関連する問題