Как использовать темы FCM для уведомления в приложении чата? - PullRequest
0 голосов
/ 30 декабря 2018

Я создаю функцию чата с бэкэндом Flutter и Firestore.

Каждое сообщение - это новый документ в коллекции Firestore с UID и текстовым полем.Разговор в чате 1: 1 и случайный, поэтому не знаю, с кем будет общаться пользователь, прежде чем войти в чатВсе DocID в коллекции чатов имеют автоматический идентификатор.

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

Кто-нибудь знает, как реализовать тему использования для этого случайного чата 1: 1?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Мне показался интересным комментарий Фрэнка о «отсортированном ключе, составленном userID».Я бы, вероятно, использовал это в качестве ключа чата в базе данных (в реальном времени / firestore), однако, для уведомлений, я думаю, я бы по-прежнему использовал тему для каждого пользователя - таким образом я мог бы избежать уведомления пользователя, который разместил сообщение,Если это не проблема, просто выберите одну тему для каждого чата.

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

В этом ответе у вас есть пример того, как публиковать уведомления с помощью триггера onCreate в теме (из бэкэнда функций).

В коде флаттера вы можете использовать subscribeToTopic из плагина firebase_messaging, чтобы начать слушать тему.

Примечание: если ваше приложение будет поддерживать выход пользователя из системы [вероятно, это будет :)], вам также придется удалить токен на устройстве , чтобы избежать получения уведомлений от последнего зарегистрированного пользователя.пользователь.

0 голосов
/ 30 декабря 2018

Вы можете определенно использовать отдельную тему для каждого разговора 1: 1, например, со схемой именования, которую я описал здесь: Лучший способ управления каналами чата в Firebase .Но нужно учесть некоторые вещи, которые, как Дуг уже указал в своем комментарии, побуждают большинство разработчиков не использовать FCM исключительно для своих приложений чата.

Например: темы FCM не защищены.Это означает, что любой, кто узнает идентификатор темы, может подписаться на него и, таким образом, подслушать разговор 1: 1.И хотя вы можете создавать темы, которые трудно угадать, вы не должны полагаться на то, что не знаете ID темы в качестве механизма безопасности.

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

По этим причинам большинство известных мне приложений чата используют комбинацию FCM (для push-уведомлений) и онлайновой базы данных (для сохранения) в качестве своих внутренних служб.

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