Чи потрібно віддалене push-повідомлення, щоб додати UIBackgroundModes до Info.plist?


104

У мене є інтегровані віддалені push-сповіщення, але я отримую це попередження:

didReceiveRemoteNotification:fetchCompletionHandler:], але вам все ще потрібно додати " remote-notification" до списку підтримуваних UIBackgroundModes у вашому Info.plist.

Моя версія Xcode - 8.3.1. Я дуже хочу до цього додати Info.plist. Я також дотримувався деяких навчальних посібників, але вони також не згадували про це. Що мені насправді робити?

Відповіді:


245

Так, слід увімкнути фонові режими / віддалені сповіщення, щоб мати можливість використовувати віддалені сповіщення для фонових оновлень.

Найпростіший спосіб зробити це через налаштування проекту. Перейдіть до Цілі -> Ваша програма -> Можливості -> Фонові режими та перевірте Віддалені сповіщення . Це автоматично включить необхідні настройки.

Випадний список "Режими тла" в Налаштуваннях проекту


3
Я вже перевірив це поле, але все одно отримую ту ж помилку.
Ануй

Ануй дивіться мою відповідь нижче
Джошуа Клієт

1
Я не згоден з цією відповіддю. Вам слід увімкнути фонові режими -> Віддалені сповіщення, лише якщо ви використовуєте віддалене сповіщення для оновлення фону. Будь ласка, зверніться до документів тут Налаштування фонового повідомлення про оновлення
jzeferino

1
@jzeferino Дякую за повідомлення, я додав уточнення до своєї відповіді. Зауважте, що початкове запитання стосувалося application(_:didReceiveRemoteNotification:fetchCompletionHandler:)функції, яка використовується для обробки даних щодо отримання даних.
Tamás Sengel

Це чудово, але відповідає на питання, чи потрібна вам можливість оновлення фону, що, звичайно, ви робите. Я розмістив відповідь про те, чи потрібно встановлювати можливість фонових режимів просто для натискання сповіщень (спойлер, ви цього не робите).
mob

30

Ви також можете відредагувати потрібний info.plist (Відкрити як -> Вихідний код) та вставити:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>

7
Тепер він автоматично додається Xcode при перевірці віддалених повідомлень у фонових режимах
Vinoth Vino

1
Не для мене: Версія 11.4.1 (11E503a)
paiego

4

Насправді вам не потрібно додавати 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-сповіщення, то вирішіть, чи потрібно запускати у фоновому режимі - лише якщо вам потрібно обоє, якщо ви реалізуєте запропонований попередженням метод.


3

Це сталося зі мною навіть після встановлення режиму віддаленого режиму сповіщень у можливостях. Проблема полягала в тому, що у мене було три цілі: одна на виробництво, одна на qa та одну на постановку. Мені довелося встановити віддалені сповіщення у всіх трьох цілях, і це зафіксувало попередження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.