didReceiveRemoteNotification не вызывается, когда приложение было открыто из уведомления - PullRequest
0 голосов
/ 27 января 2020

если уведомление об удалении было получено, когда приложение было активным - оно хорошо обрабатывается. если приложение было в фоновом режиме или неактивно - ничего не произошло. уведомления поступают из Firebase Cloud Messaging. xcode 11.3.1

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    if application.applicationState == .active {
        Utils.handlePushNotification(userInfo: userInfo) // works good
    }

    if application.applicationState == .background {
        UserDefaults.standard.set(true, forKey: "openedFromPush") // doesn't work
    }

    if application.applicationState == .inactive {
        UserDefaults.standard.set(true, forKey: "openedFromPush") // doesn't work
    }
}

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Я решил мою проблему с помощью этого:

func userNotificationCenter(_ center: UNUserNotificationCenter, 
                              didReceive response:UNNotificationResponse, 
                              withCompletionHandler completionHandler: @escaping () -> Void) {

}
0 голосов
/ 27 января 2020
  1. Убедитесь, что вы отметили Удаленные уведомления Фоновый режим в целевом приложении Подписывание и возможности Параметры:

    Xcode

  2. Ваш метод должен вызывать completionHandler(.newData) или completionHandler(.noData) при ответе на уведомление, которое поступило, когда приложение находилось в фоновом режиме.

    Документация Apple гласит:

    Если пользователь открывает ваше приложение из системного предупреждения, система может вызвать этот метод еще раз, когда ваше приложение собирается выйти на передний план, чтобы вы могли обновите свой пользовательский интерфейс и отобразите информацию, относящуюся к уведомлению. Когда приходит удаленное уведомление, система отображает уведомление для пользователя и запускает приложение в фоновом режиме (при необходимости), чтобы оно могло вызвать этот метод. Запуск приложения в фоновом режиме дает вам время на обработку уведомления и загрузку любых связанных с ним данных, сводя к минимуму количество времени, которое проходит между прибытием уведомления и отображением этих данных пользователю.

    Как только по окончании sh обработки уведомления вы должны вызвать блок в параметре обработчика, иначе ваше приложение будет закрыто. Ваше приложение имеет до 30 секунд времени настенных часов для обработки уведомления и вызова указанного блока обработчика завершения. На практике вам следует вызывать блок обработчика, как только вы закончите обработку уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...