Сообщения данных и сообщения уведомлений (разборная и неразборная путаница)

avatar
iDecode
9 августа 2021 в 06:16
263
1
4

Сообщения данных:

Документы говорит:

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

, что означает, что сообщения данных не подлежат сворачиванию и считаются важными. Однако docs также говорят:

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

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


Уведомления:

Документы говорит:

За исключением уведомлений, все сообщения по умолчанию несворачиваемы.

Я отправляю два уведомления через Firebase Notifications Composer, и, будучи сворачиваемым, старое сообщение должно быть свернуто (или заменено последним), но я вижу, что оба уведомления отображаются как на Android, так и на iOS.

Итак, почему сообщения-уведомления считаются "сворачиваемыми"?

Источник

Ответы (1)

avatar
Maulik Hirani
18 августа 2021 в 17:54
5

Очень интересный вопрос!

Похоже, документы запутаны и в некоторых местах несколько противоречивы.

Я немного покопался, и следующие моменты должны развеять некоторые ваши сомнения:

Что мы подразумеваем под сворачиваемыми сообщениями?

Официальное определение из документации:

Сворачиваемое сообщение — это сообщение, которое может быть заменено новым сообщением, если оно еще не доставлено на устройство.

Расширим приведенное выше определение некоторыми деталями:

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

Давайте рассмотрим пример: Интернет-соединение получателя отключено, и мы отправляем три сообщения, A, B и C. Теперь, когда получатель включит свой интернет, он получит только одно сообщение, C, если сообщения можно свернуть.

Однако важно отметить, что если получатель уже получил сообщение, скажем, сообщение А, то когда вы отправляете Б, оно не заменит сообщение А, которое уже доставлено получателю.


Уведомления всегда можно свернуть?

Не совсем верно.

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

За исключением уведомлений, все сообщения по умолчанию не являются сворачиваемыми.

Но когда я попытался отправить несколько уведомлений через Notification Composer из консоли Firebase (перед отправкой отключил Интернет на устройстве-получателе), я обнаружил, что при возвращении в сеть я получаю все сообщения, которые я отправил. Это наводит нас на мысль, что сообщения уведомлений нельзя сворачивать!

Но это еще полдела!

Когда вы отправляете сообщение с уведомлением каким-либо другим способом, например с помощью FCM Post API, вы получаете только самое последнее сообщение из очереди. Это означает, что сообщения уведомлений можно свернуть!

Вывод: Сообщения уведомлений не складываются при отправке через Notification Composer, в остальных случаях они складываются. (Документы нигде четко не указывают это)


Сообщения с данными нельзя свернуть, значит, они важны, верно?

Очевидный ответ: Да! но это не правильный ответ здесь.

Важные сообщения должны быть отправлены как несворачиваемые сообщения. Но несворачиваемые сообщения не равны важным сообщениям!

Причина?

Есть две стороны этого объяснения,

  1. Разделение сворачиваемых/не сворачиваемых сообщений определяется только для того, чтобы решить, важно ли для пользователя только последнее сообщение или все сообщения, отправленные до сих пор, важны для пользователя.
  2. Это не означает, что несворачиваемые сообщения будут доставляться с высоким приоритетом как важные сообщения. Вам по-прежнему необходимо учитывать приоритеты сообщений, которые зависят от правил конкретной платформы.

Итак, концепция складного/неразборного приходит на ум если сообщения могут быть доставлены получателю. Могут ли сообщения быть доставлены вовремя или нет, это совершенно другая область приоритетов сообщений и ограничений ОС и т. д.

iDecode
19 августа 2021 в 05:58
0

Замечательное объяснение. Я думаю, что команде Firebase нужно нанять кого-то вроде вас для их документации. Но скажите мне, как вы узнали об этих концепциях, поскольку документы всегда были/всегда сбивают с толку.

iDecode
19 августа 2021 в 06:00
0

Я также хотел бы добавить, что когда я отправлял уведомления одно за другим через Notification Composer, когда устройство было в автономном режиме, я видел только последнее уведомление, когда устройство подключалось к сети (протестировал его в обоих направлениях, используя «Отправить тестовое сообщение» и "Отправить обычное сообщение".

Maulik Hirani
19 августа 2021 в 08:55
1

@iDecode, я рад, что ответ помог вам. Как я уже сказал, я немного покопался, прочитав разные ответы и документы, и понял это. В случае с отправкой уведомлений через композитор немного странно, что иногда мы видим разное поведение. Сегодня я снова попробовал пару раз, и иногда я вижу оба поведения (складное и неразборное). У меня есть экранная запись сообщений уведомлений, которые не сворачиваются при отправке из составителя уведомлений: drive.google.com/file/d/1LWxYnLKK1sKCY-KOzNQHmoNlzXcVP9E9/…