±âŸ(framework)
2018.03.21 / 01:53

Firebase Web äÆÃ¾Û ¸¸µé±â - Realtime Database¸¦ ÀÌ¿ëÇÑ Ã¤Æñâ´É ±¸Çö - äÆùæ ÃÊ´ë ±â´É

ÈÞ°í
Ãßõ ¼ö 220
ÀÌÁ¦ 1´ë 1´ëÈ­ »Ó¸¸ ¾Æ´Ï¶ó ¿©·¯¸íÀÌ ÇѲ¨¹ø¿¡ äÆÃÀ» ³ª´­ ¼öÀִ äÆùæ ÃÊ´ë ±â´ÉÀ» ¸¸µé¾î º¸°Ú½À´Ï´Ù. 

¿ì¼± äÆÃ¹æ ¿ìÃø »ó´Ü¿¡ '+' ¸ð¾çÀÇ ¹öÆ°ÀÌ ÀÖ½À´Ï´Ù. ÇØ´ç ¹öÆ°À» ´©¸£¸é ÃÊ´ëÇÒ ¼ö ÀÖ´Â ÀοøµéÀÌ º¸¿©Áö´Â Æ˾÷ ¸ð´Þ âÀ» ¶ç¿ìµµ·Ï ÇÏ°Ú½À´Ï´Ù. 

ÇöÀç »óÅ¿¡¼­µµ ÃÊ´ë¹öÆ°À» ´©¸£¸é Æ˾÷ ¸ð´ÞâÀÌ ¶ß°Ô µË´Ï´Ù.  GitÀ» ÅëÇØ ¼Ò½º¸¦ ´Ù¿î ¹ÞÀ¸½Ã¸é ¸ÇóÀ½¿¡ ÃÊ´ë ¹öÆ°À» ´©¸£¸é ¸ð´ÞâÀÌ ¶ß´Â Äڵ尡  Æ÷ÇԵǾî ÀÖ´Â »óÅÂÀÔ´Ï´Ù.

<script>
/**
* Dom ·Îµù ÈÄ µ¿ÀÛ
*/
document.addEventListener('DOMContentLoaded', function() {
//FirebaseChat Ŭ·¡½º ÃʱâÈ­
window.fbChat = new FirebaseChat();
//´Ù¿î·Îµå ÇÁ·Î±×·¹½º Æ˾÷ modal ¼³Á¤
$('#dnModal').modal();
//äÆùæ ÃÊ´ë modal ¼³Á¤
$('#dvAddUser').modal();
});
view rawindex.html hosted with ❤ by GitHub




ÀÌÁ¦´Â ¸ð´Þ âÀ» ä¿ï À¯Àú¸®½ºÆ®¸¦ ¸ð´ÞâÀ¸·Î °¡Áö°í ¿À°Ú½À´Ï´Ù. À¯Àú¸®½ºÆ®´Â ¾Û ùȭ¸é À¯Àú¸®½ºÆ®ÀÇ DomÀ» ±×´ë·Î °¡Áö°í ¿Í¼­ äÆÃ¹æ ¾È¿¡ ¼ÓÇÑ ÀοøÀ» Á¦¿Ü ½ÃÅ°°í,  ¼û°ÜµÎ¾ú´ø üũ¹öÆ°À» º¸À̵µ·Ï ÇÏ°Ú½À´Ï´Ù. 

<script>
/**
* Ãʱâ ÇÊµå º¯¼ö ÇÒ´ç
*/
FirebaseChat.prototype.init = function(){
// ...»ý·«
this.ulAddUserList = document.getElementById('ulAddUserList');
}
/**
* ê¹æ ¿ÀÇ , ¸Þ¼¼Áö ·Îµå ¹× AddUserList
*/
FirebaseChat.prototype.openChatRoom = function(roomId, roomTitle){ // ÆĶó¹ÌÅÍ Ãß°¡
//...»ý·«
this.setAddUserList();
}
/**
* À¯Àú ÃÊ´ë Æ˾÷ ¸ð´Þ â ¼ÂÆÃ
*/
FirebaseChat.prototype.setAddUserList = function(){
this.ulAddUserList.innerHTML = this.ulUserList.innerHTML
var arrAddUserList = Array.prototype.slice.call(this.ulAddUserList.getElementsByTagName('li'));
var cbArrayForEach = function(item){
var itemUserUid = item.getAttribute('data-targetUserUid');
if(this.roomUserlist.indexOf(itemUserUid) === -1){
item.getElementsByClassName('done')[0].classList.remove('hiddendiv');
item.addEventListener('click',function(){
if(Array.prototype.slice.call(this.classList).indexOf('blue-text') == -1){
this.classList.add('blue-text');
}else{
this.classList.remove('blue-text');
}
});
}else{
item.parentNode.removeChild(item);
}
}
arrAddUserList.forEach(cbArrayForEach.bind(this));
}
view rawindex.html hosted with ❤ by GitHub




openChatRoom¸Þ¼Òµå¿¡ setAddUserList ¸Þ¼Òµå¸¦ ½ÇÇàÇÏ´Â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. 

setAddUserList¸Þ¼Òµå¸¦ »ìÆ캸°Ú½À´Ï´Ù. forEach´Â ÀÚ¹Ù½ºÅ©¸³Æ® ¹è¿­À» ¼øȸÇÏ´Â ¸Þ¼ÒµåÀÔ´Ï´Ù.
arrAddUserList.forEach(cbArrayForEach.bind(this));
¹è¿­À» ¼øȸÇϸ鼭 ¹æ¿¡ ¼ÓÇÑ À¯Àú°¡ ¾Æ´Ò °æ¿ì ¼û°ÜÁ®ÀÖ´ø üũǥ½Ã ¿¤¸®¸ÕÆ®¸¦ ¼û±èÀ» ÇØÁ¦ÇÏ°í,  Å¬¸¯½Ã üũ»ö±ò¿¡ º¯È­¸¦ ÁÖ°Ô ÇÕ´Ï´Ù. ¹æ¿¡ ¼ÓÇÑ À¯ÀúÀÏ °æ¿ì ÇØ´ç child ¸¦ Á¦°Å ÇÏ´Â ÄÚµåÀÔ´Ï´Ù.
var cbArrayForEach function(item){
var itemUserUid = item.getAttribute('data-targetUserUid');
if(this.roomUserlist.indexOf(itemUserUid) === -1){
          item.getElementsByClassName('done')[0].classList.remove('hiddendiv');
          item.addEventListener('click',function(){
              if(Array.prototype.slice.call(this.classList).indexOf('blue-text') == -1){
                  this.classList.add('blue-text');
              }else{
                  this.classList.remove('blue-text');
              }
          });
 }else{
          item.parentNode.removeChild(item);
  }


´ÙÀ½Àº ¸ð´Þâ¿¡¼­ ¸ð´Þ⠾Ʒ¡ Ãß°¡ ¹öÆ°À» Ŭ¸¯ÇßÀ» ½Ã üũµÈ ÀοøÀ» ÃÊ´ëÇÏ´Â ÇÁ·Î¼¼½º¸¦ Ãß°¡ÇÏ°Ú½À´Ï´Ù.

¾Æ·¡ Äڵ带 ¼öÁ¤ ¶Ç´Â Ãß°¡ÇØÁÖ¼¼¿ä.

<script>
/**
* Ãʱâ ÇÊµå º¯¼ö ÇÒ´ç
*/
FirebaseChat.prototype.init = function(){
//...»ý·«
this.aConfirmInvite =document.getElementById('aConfirmInvite');
}
/**
* Ãʱâ À̺¥Æ® ¹ÙÀεù
*/
FirebaseChat.prototype.initEvent = function(){
//...»ý·«
this.aConfirmInvite.addEventListener('click', this.onConfirmInviteClick.bind(this));
}
/**
* ÃÊ´ë
*/
FirebaseChat.prototype.onConfirmInviteClick = function(){
var arrInviteUserList = Array.prototype.slice.call(this.ulAddUserList.getElementsByClassName('blue-text'));
var arrInviteUserListLength = arrInviteUserList.length;
var arrInviteUserName = [];
var updates = {};
for(var i=0; i < arrInviteUserListLength; i++){
var inviteUserUid = arrInviteUserList[i].getAttribute('data-targetUserUid');
var inviteUserName = arrInviteUserList[i].getAttribute('data-username') + '´Ô';
updates['RoomUsers/'+ this.roomId +'/'+ inviteUserUid] = true;
arrInviteUserList[i].outerHTML = '';
this.roomUserlist.push(inviteUserUid);
this.roomUserName.push(inviteUserName);
arrInviteUserName.push(inviteUserName);
}
this.roomUserlist.sort();
this.database.ref().update(updates);
//ÃÊ´ë ¸Þ¼¼Áö
this.saveMessages(arrInviteUserName.join() + 'ÀÌ ÃÊ´ëµÇ¾ú½À´Ï´Ù.');
}
/**
* ¸Þ¼¼Áö Àü¼Û
*/
FirebaseChat.prototype.saveMessages = function(inviteMessage){ //ÆĶó¹ÌÅÍ Ãß°¡
var user = this.auth.currentUser;
var msg = inviteMessage ? inviteMessage : this.dvInputChat.innerHTML.trim();
//...»ý·«
}
view rawindex.html hosted with ❤ by GitHub




Ãß°¡ ¹öÆ°À» ´©¸£¸é onConfirmInviteClick ¸Þ¼Òµå°¡ ½ÇÇà µË´Ï´Ù. onConfirmInviteClick ¸Þ¼Òµå¸¦ »ìÆ캸¸é, 'blue-text' Ŭ·¡½º°¡ Æ÷ÇÔµÈ,¼±ÅÃÇ¥½ÃÀÎ ÆĶõ»ö ±ÛÀÚÀÎ À¯ÀúµéÀ» ã¾Æ¼­ ¹è¿­À» ¸¸µç ÈÄ ÇØ´ç ¹è¿­ÀÇ ÀοøµéÀ» Realtime Database ÀÇ RoomUsers À§Ä¡¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ°í, ÇöÀç ¹æÀοø°ú ¹æÀοøÀÇ À̸§ º¯¼ö¿¡ Ãß°¡ÇÕ´Ï´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î ÃÊ´ë ¸Þ¼¼Áö¸¦ ¹ß¼ÛÇÕ´Ï´Ù. 

ÃÊ´ë ¸Þ¼¼Áö ¹ß¼ÛÀ» À§Çؼ­ saveMessages¸Þ¼Òµå¿¡ ÆĶó¹ÌÅÍ°¡ Ãß°¡µÇ°í, ¸Þ¼¼Áö º¯¼ö¿¡ µ¥ÀÌÅ͸¦ ´ëÀÔÇÏ´Â ºÎºÐÀÌ Á¶±Ý º¯°æµÇ¾ú½À´Ï´Ù.

ÀÌÁ¦ ¿©·¯¸íÀÇ Àοø°ú ´ëÈ­¸¦ Çغ¸¼¼¿ä.


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




  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/61 [Suwoni-Codelab]