3

我想通過在iOS 10/Swift 3上打開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

你救了我的命:) –

相關問題