Работают ли тихие push-уведомления FCM (фоновый push) в iOS, как определено Apple?

#ios #swift #firebase-cloud-messaging #silent-notification

#iOS #swift #firebase-облако-обмен сообщениями #тихое уведомление

Вопрос:

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

 func application(_ application: UIApplication,
                 didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult)
                   -> Void) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // Messaging.messaging().appDidReceiveMessage(userInfo)

  // Print message ID.
  if let messageID = userInfo[gcmMessageIDKey] {
    print("Message ID: (messageID)")
  }

  // Print full message.
  print(userInfo)

  completionHandler(UIBackgroundFetchResult.newData)
}
 

Этот код приведен под заголовком Обрабатывать тихие push-уведомления. Насколько я понимаю, тихие уведомления не отображаются на экране и не предупреждают пользователя каким-либо образом, независимо от того, в каком состоянии находится приложение. Тогда почему упоминается о нажатии на уведомление?

Я намерен отправить тихое уведомление на устройство iOS и выполнить какую-либо фоновую задачу без какого-либо взаимодействия с пользователем. Ограничения фоновых уведомлений приемлемы. Поскольку в настоящее время у меня нет разрешений для учетной записи разработчика Apple, чтобы проверить это, может ли кто-нибудь сказать мне, можно ли этого достичь с помощью FCM? Или мне следует рассмотреть возможность использования APNS напрямую?

Комментарии:

1. При использовании application(_:didReceiveRemoteNotification:fetchCompletionHandler:) приложение покажет уведомление. Когда пользователь нажимает на него, приложение не отвечает.

2. Таким образом, невозможно реализовать тихие уведомления без взаимодействия с пользователем через FCM? Но это было бы возможно с APNS?

3. Если вы хотите, чтобы взаимодействие с пользователем было таким, чтобы приложение запускалось само при нажатии на уведомление, вам нужен другой метод в разделе AppDelegate .

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

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

Ответ №1:

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

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

 {
   "aps" : {
      "content-available" : 1
   },
   "acme1" : "bar",
   "acme2" : 42
}
 

Комментарий внутри фрагмента кода старый и неправильный См. Последнее объяснение Apple об этом методе

введите описание изображения здесь

Комментарии:

1. Итак, в основном комментарий внутри фрагмента кода из вопроса неверен?