Насправді вам не потрібно додавати UIBackgroundModes до .plist просто для використання віддалених сповіщень.
Я знаю, що я трохи розбиваю спадкоємців (інша відповідь, як правило, чудова, і, можливо, щось нове, як в iOS 11), але питання стосується наштовхуючих повідомлень, що потребують фонових оновлень, і вони не відповідають цим.
Відмінність тут полягає в тому, що є два різних способи, які приймають сповіщення на AppDelegate;
Для цього не потрібно використовувати UIBackgroundModes:
optional func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
Вищезазначене замінює застарілий станом на iOS 11:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any])
А для цього потрібна можливість фонових режимів:
optional func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
Тут головне: колишній (і застарілий, який він замінив) працює лише тоді, коли додаток стоїть на передньому плані. Останній запуститься, якщо додаток знаходиться на передньому плані АБО на задньому плані. Дивіться технічну характеристику цього конкретного самородка:
Використовуйте цей метод для обробки вхідних віддалених сповіщень для вашої програми. На відміну від програми (_: didReceiveRemoteNotification :) метод, який викликається лише тоді, коли ваш додаток працює на передньому плані, система викликає цей метод, коли ваш додаток працює на передньому плані або на задньому плані.
Отже, якщо вам потрібні push-сповіщення, то вирішіть, чи потрібно запускати у фоновому режимі - лише якщо вам потрібно обоє, якщо ви реалізуєте запропонований попередженням метод.