Realtime Databaseでユーザーのオンラインを検知する(プレゼンス)【Firebase】
今回はFirebase Version9のrealtime databaseでプリゼンスを取得してみようと思います。
ネットにおいてあるものはfirebase公式のものは大体Version8で記述されていたので大変でした。
var isOfflineForDatabase = { state: 'offline', last_changed: serverTimestamp(), }; var isOnlineForDatabase = { state: 'online', last_changed: serverTimestamp(), }; var userID; var userStatusDatabaseRef; userID = auth.currentUser.uid; userStatusDatabaseRef = ref(window.database,'/status/' + userID); onValue(ref(window.database,'.info/connected'), function(snapshot) { if (snapshot.val() == false) { //データが存在しない return; }; //さきにオフライン時の処理を実行する onDisconnect(userStatusDatabaseRef).set(isOfflineForDatabase).then(()=>{ // オンライン時の処理、リアルタイムデータベースに書き込み set(userStatusDatabaseRef,isOnlineForDatabase); }); })
この処理によって実際にユーザーがページを現在開いているか取得できます。
スマホなどのスリープなどでもオフラインになります。