Так как это без сервера, нет перехватчиков
На самом деле, 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
. Поэтому при запуске облачной функции вы захотите определить, какие последние сообщения не были доставлены.