3

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() 
} 

Antwort

4

fand ich endlich das Problem: wenn die UNNotificationAction erklärt, müssen Sie UNNotificationActionOptions.foreground im Optionsarray enthalten.

+0

du hast mein Leben gerettet :) –

Verwandte Themen