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

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

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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам