Как уведомить офлайн-клиенты Firebase Cloud Messaging о том, что у них есть непрочитанные сообщения - PullRequest
0 голосов
/ 31 марта 2020

Я использую Firebase Cloud Messaging FCM в веб-приложении, мой сценарий выглядит следующим образом:

Пользователь-A пытается отправить сообщение пользователю B (который не в сети).

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

Итак, две части информации, о которых решение связаться с пользователем:

  1. что они не в сети
  2. у них есть непрочитанное сообщение (я)

Я смотрел на потенциально опрашиваемые вещи как firebase.database.OnDisconnect или, возможно, опроса аутентификации.

Поскольку это без сервера, здесь нет хуков, так что мне для этого использовать?

1 Ответ

1 голос
/ 31 марта 2020

Так как это без сервера, нет перехватчиков

На самом деле, Firebase имеет встроенную систему для прослушивания изменений базы данных (таких как onDisconnect срабатывание записи) в Облачные функции для Firebase . Например, скажем, что вы используете систему присутствия , как показано в документе , сохраняя соединения для каждого пользователя в /onlineUsers/$uid. Это означает, что до тех пор, пока пользователь подключен к сети на любом устройстве, его /onlineUsers/$uid будет существовать, и когда его последнее соединение будет закрыто (или, по крайней мере, когда сервер обнаружит это), его /onlineUsers/$uid исчезнет.

Теперь вы можете настроить облачную функцию, которая запускается в ответ на удаление /onlineUsers/$uid, например:

exports.userWentOffline = functions.database.ref('/onlineUsers/{uid}')
    .onDelete((snapshot, context) => {
      console.log('userWentOffline', context.params.uid);
      return null;
    });

В теле этой облачной функции вы можете делать все, что захотите.


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


Несколько вещей, которые имейте в виду:

  • Один пользователь / UID может иметь несколько подключений к базе данных, даже если они находятся на одном устройстве. Поэтому убедитесь, что вы внедрили систему присутствия, как показано в конце связанных документов, что позволяет это сделать.
  • Если соединение между клиентом и сервером не завершено должным образом, может потребоваться до за несколько минут до того, как сервер обнаружит, что клиент ушел, и запустит обработчики onDisconnect. Поэтому при запуске облачной функции вы захотите определить, какие последние сообщения не были доставлены.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...