[SWIFT] Erhalten Sie parametrisierte PUSH-Benachrichtigungen unter iOS

Als Voraussetzung für diesen Artikel wird angenommen, dass PUSH-Benachrichtigungen bereits eingetroffen sind.

Referenzen zum Implementieren von PUSH-Benachrichtigungen: Richten Sie die Firebase Cloud Messaging-Client-App unter iOS ein (https://firebase.google.com/docs/cloud-messaging/ios/client).

Standardmäßig wird das PUSH-Benachrichtigungsbanner nicht angezeigt, wenn die App ausgeführt wird. Der Wert kommt bei der nächsten didReceiveRemoteNotification an.


class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        //Kürzung...

        Messaging.messaging().delegate = self

        //Kürzung...
}

extension AppDelegate: MessagingDelegate {

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        print(userInfo)
    }

}

Wenn jedoch UNUserNotificationCenter verbunden ist, wird die oben genannte didReceiveRemoteNotification nicht mehr aufgerufen, und die folgende Funktion wird jetzt aufgerufen. Abhängig von dem an CompletionHandler zurückgegebenen Wert wird das PUSH-Benachrichtigungsbanner auch dann angezeigt, wenn sich die App auf der gesamten Oberfläche befindet.

DidReceive wurde aufgerufen, als Sie auf die App getippt haben, unabhängig davon, ob sie ausgeführt wurde oder nicht. Sie dürfen didReceiveRemoteNotification nicht verwenden, wenn ein Prozess zum Tippen auf die PUSH-Benachrichtigung vorhanden ist.

extension AppDelegate : UNUserNotificationCenterDelegate {
    
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        let userInfo = notification.request.content.userInfo

        print(userInfo)
        
        if #available(iOS 14.0, *) {
            completionHandler([[.banner, .list, .sound]])
        } else {
            completionHandler([[.alert, .sound]])
        }
        
        // NOTE:Klicken Sie hier, wenn Sie keine Push-Benachrichtigungen anzeigen möchten
        // completionHandler([])
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo

        //Wird als Warnung angezeigt, um userInfo einfach zu überprüfen, wenn es nicht gestartet wird
        if let rootViewController = (UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.window?.rootViewController {
            let alertController = UIAlertController(title: "userInfo", message: userInfo.description, preferredStyle: .alert)
            let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
            alertController.addAction(okAction)
            rootViewController.present(alertController, animated: true, completion: nil)
        }
                
        completionHandler()
    }
    
}

Verweise

Recommended Posts

Erhalten Sie parametrisierte PUSH-Benachrichtigungen unter iOS
Das Problem, dass das Popup-Fenster für Push-Benachrichtigungsberechtigungen unter iOS14 nicht angezeigt wird
[IOS] canOpenURL wird in iOS14 falsch
ATDD-Entwicklung unter iOS (Basic Edition)