±âŸ(framework)
2018.03.21 / 01:53

Firebase Web äÆÃ¾Û ¸¸µé±â - Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - Á¢¼Ó ÁßÀÎ À¯Àú Ç¥½ÃÇϱâ

ÈÞ°í
Ãßõ ¼ö 202
Realtime Database ¿¡´Â »ç¿ëÀÚÀÇ Á¢¼Ó»óÅ°¡ ¹Ù²ð ¶§¸¶´Ù µ¥ÀÌÅÍ°¡ º¯°æÀÌ µÇ´Â Ư¼öÇÑ À§Ä¡°¡ ÀÖ½À´Ï´Ù. '/.info/connected' À§Ä¡ÀÔ´Ï´Ù. ÇØ´ç À§Ä¡¸¦ È°¿ëÇÏ¿© Á¢¼ÓÀÌ µÇ¸é À¯Àú¸®½ºÆ® È­¸é¿¡¼­ Á¢¼ÓÇÏ¿´À½À» Ç¥½ÃÇØÁÖ´Â ±â´ÉÀ» ±¸ÇöÇØ º¸°Ú½À´Ï´Ù.


Á¢¼ÓÀ» Çϰųª Á¢¼ÓÀ» ²÷°Ô µÇ¸é UsersConnection À§Ä¡¿¡ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ°Ú½À´Ï´Ù. ¾Æ·¡ÀÇ Äڵ带 ÀÛ¼ºÇØ ÁÖ¼¼¿ä.

<script>
/**
* ·Î±×ÀÎ ÈÄ ¼¼ÆÃ
*/
FirebaseChat.prototype.setLogin = function(user){ //user ÆĶó¹ÌÅÍ Ãß°¡
//...»ý·«
this.checkOnline();
}
/**
* ¿Â¶óÀÎ ¿©ºÎ üũ Çϱâ À§ÇÑ µ¥ÀÌÅÍ ÀÔ·Â
*/
FirebaseChat.prototype.checkOnline = function(){
var userUid = this.auth.currentUser.uid;
var myConnectionsRef = this.database.ref('UsersConnection/'+userUid+'/connection');
var lastOnlineRef = this.database.ref('UsersConnection/'+userUid+'/lastOnline');
var connectedRef = this.database.ref('.info/connected');
connectedRef.on('value', function(snap) {
if (snap.val() === true) {
myConnectionsRef.set(true);
// ¿¬°á ´ÜÀý À̺¥Æ®
myConnectionsRef.onDisconnect().set(false);
lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP);
}
});
}
view rawindex.html hosted with ❤ by GitHub




·Î±×ÀÎ ÈÄ checkOnline ¸Þ¼Òµå°¡ ½ÇÇàµË´Ï´Ù. Á¢¼ÓÀ» ÇÏ°Ô µÇ¸é ¾Õ¼­ ¾ð±ÞÇÑ '/.info/connected' À§Ä¡¿¡ true °ªÀÌ ÀԷµ˴ϴÙ. ¾Æ·¡ÀÇ ÄÚµå´Â '/.info/connected' À§Ä¡ÀÇ µ¥ÀÌÅÍ º¯È­¸¦ °¨ÁöÇÏ¿©, true °ªÀÌ µé¾î¿Ô´ÂÁö È®ÀÎÇÑ ÈÄ UsersConnection ¾Æ·¡ ÀÚ½ÅÀÇ UID°ª ¾Æ·¡ true °ªÀ» ÀÔ·ÂÇÕ´Ï´Ù.

var connectedRef this.database.ref('.info/connected');
    connectedRef.on('value'function(snap) {
        if (snap.val() === true) {
            myConnectionsRef.set(true);
             ... (»ý·«)
        }
    });

Á¢¼ÓÀ» ÇÑ ÈÄ¿¡ µ¥ÀÌÅÍ ÀÔ·ÂÀº ÇÏ´Â°Ç Å¬¶óÀ̾ðÆ® Äڵ尡 ½ÇÇàÀ» ÇÏ°ÔµÇ¾î °ªÀ» ÀÔ·ÂÇÏ¸é µÇÁö¸¸, ºê¶ó¿ìÀú¸¦ ²¨¹ö¸®¸é Äڵ尡 ½ÇÇàÀÌ ¾ÈµÇ´Âµ¥ ¾î¶»°Ô µ¥ÀÌÅ͸¦ ÀÔ·ÂÀ» ÇÒ±î¿ä? Realtime Database ¿¡¼­´Â onDisconnect¶ó´Â ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù.  Á¢¼ÓÀÌ ²÷°åÀ» ¶§ true°ªÀ» ÀÔ·ÂÇß´ø À§Ä¡¿¡ false¸¦ ÀÔ·ÂÇÏ°í, lastOnlineÇʵ忡´Â ¼­¹ö½Ã°£À» ±â·ÏÇÕ´Ï´Ù. 
myConnectionsRef.onDisconnect().set(false);
lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP);
ÀÌÁ¦ Á¢¼Ó ±â·ÏÀ» ÀúÀåÇÏ´Â ÄÚµå´Â ¿Ï·áµÇ¾ú°í, UsersConnection À§Ä¡ÀÇ µ¥ÀÌÅÍ º¯°æÀ» °¨ÁöÇÏ¿© À¯Àú¸®½ºÆ® È­¸é¿¡ Ç¥½ÃÇÏ´Â Äڵ带 ÀÛ¼ºÇغ¸°Ú½À´Ï´Ù.

<script>
/**
* ù¹ø° ÅÇ À¯Àú¸®½ºÆ® È£Ãâ
*/
FirebaseChat.prototype.loadUserList = function(){
//...»ý·«
var cbCompleteUserList = function(){
this.loadOnlineStatus();
}
userRef.orderByChild("userName")
.once('value', this.getUserList.bind(this))
.then(cbCompleteUserList.bind(this));
}
/**
* À¯ÀúÀÇ ¿Â¶óÀÎ ¿©ºÎ °¨ÁöÇÏ¿© À¯Àú¸®½ºÆ®¿¡ Ç¥½Ã ÇØÁÖ´Â ±â´É
*/
FirebaseChat.prototype.loadOnlineStatus = function(){
var usersConnectionRef = this.database.ref('UsersConnection');
usersConnectionRef.off();
var cbUserConnection = function(data){
var connKey =data.key;
var connValue = data.val();
var onlineIcon = document.querySelector('#li' + connKey+' .mood');
if(onlineIcon != null){
if(connValue.connection === true){
onlineIcon.classList.remove('hiddendiv');
}else{
onlineIcon.classList.add('hiddendiv');
}
}
}
usersConnectionRef.on('child_added', cbUserConnection.bind(this));
usersConnectionRef.on('child_changed', cbUserConnection.bind(this));
}
view rawindex.html hosted with ❤ by GitHub




¿ì¼± loadUserList ¸Þ¼Òµå¸¦ ¼öÁ¤ÇÕ´Ï´Ù. userList°¡ load°¡ ¿Ï·áµÇ¸é loadOnlineStatus ¸Þ¼Òµå¸¦ È£ÃâÇÕ´Ï´Ù.
var cbCompleteUserList function(){
        this.loadOnlineStatus();
    }
 userRef.orderByChild("userName")
        .once('value'this.getUserList.bind(this))
        .then(cbCompleteUserList.bind(this));


loadOnlineStatus¸Þ¼Òµå´Â UsersConnection À§Ä¡¿¡ µ¥ÀÌÅÍ º¯°æÀ» °¨ÁöÇؼ­ »õ·Ó°Ô Ãß°¡µÇ°Å³ª º¯°æµÇ¾úÀ» ½Ã¿¡ µ¥ÀÌÅ͸¦ È®ÀÎÇÏ¿© Á¢¼Ó¿©ºÎ ¾ÆÀÌÄÜÀ» ³ëÃâ½ÃÅ°°Å³ª ¼û±â´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. 




éÅÍ ¿Ï¼º ¼Ò½º  :

 10.Realtime Database를 이용한 채팅기능 구현 - 접속 중이





  1. ¿¹Á¦ ¼Ò°³
  2. Firebase ¼³Á¤Çϱâ
  3. HostingÀ» È°¿ëÇÑ ÇÁ·ÎÁ§Æ® Áغñ ÀÛ¾÷
  4. AuthenticationÀ» ÀÌ¿ëÇÑ À¯Àú °¡ÀÔ ¹× ·Î±×ÀÎ ±¸ÇöÇϱâ
  5. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - Reatime Database Ư¡ ¹× µ¥ÀÌÅÍ ±¸Á¶
  6. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - À¯Àúµ¥ÀÌÅÍ ÀúÀåÇϱâ
  7. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - À¯Àú¸®½ºÆà ȭ¸é
  8. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - äÆÃÈ­¸é ¹× äÆø޼¼Áö ¸®½ºÆÃ
  9. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - äÆø޼¼Áö Àü¼Û±â´É
  10. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - äÆÃ¹æ ¸®½ºÆÃÈ­¸é
  11. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - äÆùæ ÃÊ´ë ±â´É
  12. Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - Á¢¼Ó ÁßÀÎ À¯Àú Ç¥½ÃÇϱâ
  13. Storage¸¦ ÀÌ¿ëÇÑ ÆÄÀÏ Àü¼Û±â´É
  14. Cloud Messaging°ú FunctionsÀ» ÀÌ¿ëÇÑ Çª½Ã¸Þ¼¼Áö ±â´É - FCM Token Á¤º¸ ÀúÀå
  15. Cloud Messaging°ú FunctionsÀ» ÀÌ¿ëÇÑ Çª½Ã¸Þ¼¼Áö ±â´É - Functions¸¦ ÅëÇÑ FCM ¹ß¼Û
  16. Cloud Messaging°ú FunctionsÀ» ÀÌ¿ëÇÑ Çª½Ã¸Þ¼¼Áö ±â´É - Service worker¸¦ ÀÌ¿ëÇÑ FCM¼ö½Å
  17. Realtime Database ±ÇÇÑ ¼³Á¤

 



Ãâó: http://cionman.tistory.com/62 [Suwoni-Codelab]