文系忘備録

どこにでもいる文系大学生の忘備録です

MENU

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);
    });
    })

この処理によって実際にユーザーがページを現在開いているか取得できます。
スマホなどのスリープなどでもオフラインになります。