Подтвердить что ты не робот

Получение уведомлений Push в фоновом режиме

Я знаю, что это во многих местах, но я не могу понять это. Я использую Urban Airship для push-уведомлений. Все кажется прекрасным, за исключением того, что когда мое приложение находится в фоновом режиме - didReceiveRemoteNotification не получает вызов. Он работает, когда на переднем плане - я могу правильно обрабатывать сообщения. И я могу получить сообщения от параметров запуска, если сообщение отправлено из центра уведомлений. Но когда в фоновом режиме отправленное сообщение - iOS отображает предупреждение - didReceiveRemoteNotification не вызывается. Когда я нажимаю на значок приложения (не из центра уведомлений), приложение выходит на передний план, и я понятия не имею, есть ли уведомление. Любые идеи?

4b9b3361

Ответ 1

Из руководства по программированию APNS:

Давайте рассмотрим возможные сценарии, когда локальное уведомление или удаленное уведомление для приложения.

Уведомление доставляется, когда приложение не работает в на переднем плане. В этом случае система представляет уведомление, отображение предупреждения, значка значка, возможно, воспроизведение звука.

В результате представленного уведомления пользователь нажимает кнопку действия предупреждения или нажатия (или кликов) значка приложения. Если действие (на устройстве под управлением iOS), система запускает приложение и приложение называет своих делегатов application: didFinishLaunchingWithOptions: метод (если он реализован); Это проходит в полезной нагрузке уведомления (для удаленных уведомлений) или объект локального уведомления (для локальных уведомлений).

Если значок приложения отображается на устройстве с iOS, приложение вызывает тот же метод , но не предоставляет никакой информации о уведомление.

Я считаю, что последнее предложение описывает ваше дело и объясняет, почему ваше приложение не получает никакой информации об уведомлении.

Ответ 2

application:didReceiveRemoteNotification: вызывается в фоновом режиме только тогда, когда вы добавили ключ content-available со значением 1 в полезную нагрузку уведомления. В случае с Урбанским дирижаблем вы можете отправить тестовое нажатие на вкладку "Настройка". Пример полезной нагрузки для Push-уведомлений:

{
  "aps": {
    "alert": "aaaa",
    "badge": "+1",
    "content-available": "1"
  },
  "device_tokens": [
    "86BA71E361B849E8312A7B943BA6B26A74AB436381CF3FEE3CD9EB436A12A292"
  ]
}

Apple четко упомянула в своей документации....

Для push-уведомления для запуска операции загрузки, полезная нагрузка уведомлений должна включать ключ, доступный для контента, с его значение установлено в 1. Когда этот ключ присутствует, система пробуждает приложение в фон (или запускает его в фоновом режиме) и вызывает приложение делегаты Применение: didReceiveRemoteNotification: fetchCompletionHandler: метод. Ваша реализация этого метода должна загружать соответствующий контент и интегрировать его в ваше приложение. https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Ответ 3

didReceiveRemoteNotification вызывается ТОЛЬКО, если приложение на переднем плане или приложение только что запущено или куплено с фона на передний план

в Apple и некоторые question

Ответ 4

Метод doneFinishLaunchingWithOptions: (NSDictionary *) launchOptions. Параметр launchOptions - один из ключей словаря UIApplicationLaunchOptionsRemoteNotificationKey, который содержит нажатую информацию уведомления о нажатии.

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

if (launchOptions) {
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
        self.notificationToMakeAction = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    }
}