Tatsächlich müssen Sie UIBackgroundModes nicht zu .plist hinzufügen, um Remote-Benachrichtigungen zu verwenden.
Ich weiß, dass ich Erben ein wenig aufspalte (die andere Antwort ist meistens großartig, und vielleicht ist ab iOS 11 etwas neu), aber die Frage bezieht sich auf Push-Benachrichtigungen, die Hintergrundaktualisierungen erfordern, und das tun sie nicht.
Der Unterschied besteht darin, dass es zwei verschiedene Methoden gibt, die Benachrichtigungen im AppDelegate akzeptieren.
Für diesen Fall müssen Sie UIBackgroundModes nicht verwenden:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
Das Obige ersetzt das ab iOS 11 veraltete:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
Und dieser erfordert Hintergrundmodi:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
Das Wichtigste dabei ist, dass die erstere (und die veraltete, die sie ersetzt hat) nur ausgeführt wird, wenn sich die App im Vordergrund befindet. Letzteres wird ausgeführt, wenn sich die App im Vordergrund ODER im Hintergrund befindet. Siehe die Spezifikation für dieses spezielle Nugget:
Verwenden Sie diese Methode, um eingehende Remote-Benachrichtigungen für Ihre App zu verarbeiten. Im Gegensatz zur Anwendungsmethode (_: didReceiveRemoteNotification :), die nur aufgerufen wird, wenn Ihre App im Vordergrund ausgeführt wird, ruft das System diese Methode auf, wenn Ihre App im Vordergrund oder Hintergrund ausgeführt wird.
Wenn Sie Push-Benachrichtigungen benötigen, entscheiden Sie daher, ob Sie im Hintergrund ausgeführt werden müssen. Nur wenn Sie beide benötigen, sollten Sie die in der Warnung vorgeschlagene Methode implementieren.