Фактически, вам не нужно добавлять UIBackgroundModes в .plist просто для использования удаленных уведомлений.
Я знаю, что немного разделяю наследников (другой ответ в основном отличный, и, возможно, что-то новое в iOS 11), но вопрос касается push-уведомлений, требующих фоновых обновлений, а они этого не делают.
Различие здесь в том, что есть два разных метода, которые принимают уведомления в 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)
Ключевым моментом здесь является то, что прежний (и устаревший, который он заменил) запускается только тогда, когда приложение находится на переднем плане. Последний будет работать, если приложение находится на переднем плане ИЛИ в фоновом режиме. Смотрите спецификации для этого конкретного самородка:
Используйте этот метод для обработки входящих удаленных уведомлений для вашего приложения. В отличие от метода application (_: didReceiveRemoteNotification :), который вызывается только тогда, когда ваше приложение работает на переднем плане, система вызывает этот метод, когда ваше приложение работает на переднем плане или в фоновом режиме.
Следовательно, если вам нужны push-уведомления, тогда решите, нужно ли вам работать в фоновом режиме - только если вам нужны оба, вы должны реализовать метод, предложенный предупреждением.