Получить содержимое удаленного push-уведомления, полученного, когда приложение не запущено, после того, как пользователь запустит приложение из значка приложения. - PullRequest
1 голос
/ 09 апреля 2019

Я читал Apple Docs и некоторые другие источники.Но не могу найти ответ.

Проблема заключается в следующем:

Условия :

  • Удаленное push-уведомление, которое получает приложениечувствителен ко времени и должен доставляться на устройство как можно скорее.
  • Уведомление содержит информацию, необходимую для любого запускаемого пользователем приложения (т. е. независимо от того, нажимают ли они на уведомление или нет).

Сценарий :

  1. Удаленное push-уведомление отправляется на устройство, когда приложение не запущено (не в фоновом режиме, но вообще не работает).
  2. Пользователь не нажимает на уведомление.Вместо этого пользователь нажимает на значок приложения.

Похоже, что в этом случае нет способа получать содержимое уведомления при запуске приложения.Уведомление не теряется: оно остается в области уведомлений до тех пор, пока пользователь не щелкнет по нему, но содержимое уведомления не передается приложению при запуске приложения.

Что я пробовал до сих пор

Мне удалось получить содержимое уведомления в любом другом сценарии:

  • У меня есть обработчик

     func userNotificationCenter(
         _ center: UNUserNotificationCenter,
         willPresent notification: UNNotification,
         withCompletionHandler <...>
    

    , когда приложение находится на переднем плане

  • Когда приложение находится в фоновом режиме, обработчик

    func application(
        _ application: UIApplication,
        didReceiveRemoteNotification userInfo: [AnyHashable : Any],
        fetchCompletionHandler completionHandler: <...> 
    
  • В качестве меры безопасности я также перебираю выдающиеся уведомления, такие как:

    func application(
        _ application: UIApplication, 
        didFinishLaunchingWithOptions <...> {
    
        UNUserNotificationCenter.current()
            .getDeliveredNotifications { 
                (notifications: [UNNotification]) -> Void in 
    

    И, в той же функции, я проверяю, содержит ли launchOptions какие-либо уведомления.

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

  • didReceiveRemoteNotification:fetchCompletionHandler не вызывается
  • UNUserNotificationCenter.current().getDeliveredNotifications возвращает 0 уведомлений (хотя уведомлениев области уведомлений).
  • В didFinishLaunchingWithOptions значение launchOptions равно alos nil ...

Эта статья , кажется, подтверждает это поведение,но не дает никакого решения.

Я также видел этот вопрос, но, хотя это может быть приемлемым решением для нужд ОП, он не дает прямого ответа на его вопрос, так как использование флага content-available меняет способ уведомлениядоставлено (см. Настройка фонового уведомления об обновлении в разделе на этой странице , а также уменьшает его приоритет, как объяснено в apns-priority разделе на этой странице.

Кстати, если я нажму на уведомление после открытия приложения, поведение будет таким, как ожидалось, поэтому уведомление не полностью потеряно для приложения, оно просто не предоставляется при его запуске.

Так что яИмея дело с этим - какой-то крайний случай, ошибка или, возможно, такое поведение предназначено - если так, то почему?

Заранее спасибо.

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