Ich versuche, lokale Benachrichtigungen zu bearbeiten, indem ich eine URL unter iOS 10/Swift 3 öffne. Ich habe eine URL der Standardaktion der Benachrichtigung zugewiesen und eine andere einer benutzerdefinierten Aktionsschaltfläche zugewiesen.URL kann nicht vom Benachrichtigungsaktionshandler geöffnet werden
Wenn die Standardaktion ausgelöst wird (Tippen auf die Benachrichtigung selbst), öffnet die App die URL erfolgreich. Aber wenn die Aktionsschaltfläche angetippt wird, wird der Handler UNUserNotificationCenterDelegate
aufgerufen und canOpenURL
gibt True zurück, aber der Aufruf zum Öffnen der URL schlägt fehl.
Dieses Problem tritt nur auf, wenn die App im Hintergrund ist oder beim Antippen der Benachrichtigung beendet wird. Wenn die App im Vordergrund ist, funktionieren beide Fälle.
Ich habe auch einen Haltepunkt in meiner App Delegate application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:])
Methode. Es trifft auf die Standardaktion, aber nicht auf die benutzerdefinierte Aktion.
Muss ich bei der Bearbeitung einer benutzerdefinierten Aktion etwas anderes tun? Hier
ist der Code:
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()
}
du hast mein Leben gerettet :) –