Требуется ли для удаленных push-уведомлений добавить UIBackgroundModes в Info.plist?

Я интегрировал удаленные push-уведомления, но получаю это предупреждение:

didReceiveRemoteNotification:fetchCompletionHandler:], но вам все равно нужно добавить "remote-notification" в список поддерживаемых UIBackgroundMode в вашем Info.plist.

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


person user1960169    schedule 01.08.2017    source источник


Ответы (6)


Да, вам следует включить фоновые режимы / удаленные уведомления, чтобы иметь возможность использовать удаленные уведомления для фоновых обновлений.

Проще всего это сделать в настройках проекта. Перейдите в Цели -> Ваше приложение -> Возможности -> Фоновые режимы и установите флажок Удаленные уведомления. Это автоматически активирует необходимые настройки.

Раскрывающийся список фоновых режимов в настройках проекта

person Tamás Sengel    schedule 01.08.2017
comment
Я уже проверял это поле, но все равно получаю ту же ошибку. - person Anuj; 01.05.2018
comment
Анудж см. Мой ответ ниже - person Joshua Cleetus; 11.12.2018
comment
Я не согласен с этим ответом. Вам следует включать только фоновые режимы - ›Удаленные уведомления, если вы используете удаленное уведомление для фонового обновления. См. Документацию здесь Настройка уведомления об обновлении в фоновом режиме < / а> - person jzeferino; 24.07.2019
comment
@jzeferino Спасибо за уведомление, я добавил пояснение к своему ответу. Обратите внимание, что исходный вопрос касался функции application(_:didReceiveRemoteNotification:fetchCompletionHandler:), которая используется для обработки выборки данных. - person Tamás Sengel; 24.07.2019
comment
Это здорово, но отвечает на вопрос, нужна ли вам возможность фоновых обновлений, что, конечно же, нужно. Я опубликовал ответ о том, нужно ли вам устанавливать возможность фоновых режимов просто для push-уведомлений (спойлер, вам этого не нужно). - person mobob; 30.11.2019

Вы также можете отредактировать необходимый info.plist (Открыть как -> Исходный код) и вставить:

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
person Aleksandr B.    schedule 03.04.2018
comment
Теперь он автоматически добавляется Xcode при проверке удаленных уведомлений в фоновых режимах. - person Vinoth Vino; 17.12.2018
comment
Не для меня: Версия 11.4.1 (11E503a) - person paiego; 24.04.2020

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

person mobob    schedule 30.11.2019

Со мной такое случилось даже после установки в возможностях фонового режима удаленных уведомлений. Проблема заключалась в том, что у меня было три цели: одна для производства, одна для контроля качества и одна для постановки. Мне пришлось установить удаленные уведомления для всех трех целей, и это устранило предупреждение.

person Joshua Cleetus    schedule 11.12.2018

Выберите файл .xcodeproj в навигаторе проекта, затем перейдите в Подписание и возможности, а затем в библиотеке (command + shift + l или Click (+ Capability)) найдите Фоновые режимы, после чего перетащите его в Подписание и возможности, затем установите флажок Удаленные уведомления и Фоновая обработка. Также (важно) добавьте Push-уведомления, нажав + Возможность.

person GO.exe    schedule 22.10.2020

Если вы не найдете список, содержащий фоновые режимы в Подписание и возможности, просто добавьте Обязательные фоновые режимы в Info.plist вашего проекта. Теперь вы получите список, содержащий Удаленные уведомления на вкладке Подпись и возможности, просто отметьте его.

person Md Rais    schedule 25.03.2021