FCM - это один способ, но это не единственный способ - тем не менее, я думаю, что это хороший способ! :)
Взгляните на плагин firebase_messaging
.
Я полагаю, что самый простой способ сделать это - заставить ваше приложение чата работать независимо от FCM (как вы, вероятно, уже делаете), что означает, что сообщения сохраняются в firestore, и вы не используете FCM для передачи сообщений.
Затем вы можете настроить триггер Firestore в облачной функции для автоматической отправки уведомлений клиентам. Вы должны настроить прослушиватель сообщений, и, когда они будут добавлены в хранилище, облачная функция будет публиковать уведомления.
В приложении вы будете показывать уведомления только тогда, когда приложение не на переднем плане. Обработка onResume
и onLaunch
, чтобы указать приложению правильный разговор.
В облачной функции, которая обрабатывает триггер Firestore, клиенты могут быть обнаружены по их идентификаторам токенов, или вы можете заставить клиентов подписаться на определенные темы (например, идентификатор комнаты чата), и триггер / функция будет отправьте им уведомление.
Использование токенов намного сложнее, так как вам нужно будет определить идентификатор токена на всех клиентах, сохранить их в firestore как часть пользователя и держать их в курсе, так как они меняются со временем. А затем для отправки вам нужно будет отправить отдельное уведомление каждому tokenID.
Использовать темы проще, клиентское приложение должно будет использовать только метод subscribeToTopic
для прослушивания уведомлений по данной теме (в данном случае - в чате). Поэтому, когда облачная функция обнаруживает сообщение, вы публикуете только одно уведомление в его теме, и все подписчики получают уведомления.
Извините, если это очень поверхностное объяснение, но на самом деле это не очень простая тема. :)