Отрицание в состоянии при отправке сообщения FCM

Я подписываюсь на тему, которая является моей версией приложения на Android.

FirebaseMessaging.getInstance().subscribeToTopic(APP_VERSION);

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

"condition": "!'2.1.1' in topics",

В FCM существует нечто подобное?

Ответы

Ответ 1

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

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

Несколько, о которых я могу думать:

  • отслеживать версию приложения, которое каждый пользователь/идентификатор устройства установил в структуре Map<Token, Version>. Вы можете использовать базу данных Firebase для этого.

  • перечислить все старые версии и настроить те, у кого есть уведомление.

  • отправить сообщение с сообщением о новой версии для всех (через API облачных сообщений), а затем отключить отображение сообщения в onMessageReceived(), если у них уже есть последняя версия.

Хм... в ретроспективе # 3 кажется довольно чистым решением. Вы пересылаете, но система может справиться с этим, и пока частота не слишком высока, скорее всего, ваши пользователи не будут сильно затронуты.

Ответ 2

В разделе "Без рубрики" не поддерживается операция "люди, не подписавшиеся на xxx".

Однако для вашей usecase (отправьте уведомление пользователям, которые не обновились), я бы предложил использовать Firebase Notification (не путать с FCM, firebase cloud messaging), вы можете найти doc здесь.

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

Ответ 3

Похоже, Firebase поддерживает это сейчас! Firebase send-message

Вы можете включить до пяти тем в ваше условное выражение, и скобки поддерживаются. Поддерживаемые операторы: &&, ||,!. Обратите внимание на использование для:

!('TopicA' in topics)

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