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