无法从通知操作处理程序打开 URL
Cannot open URL from notification action handler
我正在尝试通过在 iOS 10 / Swift 3 上打开 URL 来处理本地通知。我有一个 URL 分配给通知的默认操作,并且另一个分配给自定义操作按钮。
当触发默认操作(点击通知本身)时,应用会成功打开 URL。但是当点击操作按钮时,UNUserNotificationCenterDelegate
处理程序被调用并且 canOpenURL
returns 为真,但是打开 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()
}
我终于找到了问题:声明UNNotificationAction时,你必须在选项数组中包含UNNotificationActionOptions.foreground。
我正在尝试通过在 iOS 10 / Swift 3 上打开 URL 来处理本地通知。我有一个 URL 分配给通知的默认操作,并且另一个分配给自定义操作按钮。
当触发默认操作(点击通知本身)时,应用会成功打开 URL。但是当点击操作按钮时,UNUserNotificationCenterDelegate
处理程序被调用并且 canOpenURL
returns 为真,但是打开 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()
}
我终于找到了问题:声明UNNotificationAction时,你必须在选项数组中包含UNNotificationActionOptions.foreground。