Pada kesempatan kali ini saya ingin berbagi kepada para developer semua tentang Membuat Realtime Chat dengan menggunakan Firebase. Buat yang belum tau apa itu FireBase silakan baca disini Apa itu FIREBASE?

Sebelum ke praktek mari kita bahas dulu Kenapa harus menggunakan Firebase? toh pake Ajax bisa?. Jawabannya adalah Jika kita menggunakan ajax memerlukan proses request secara berulang-ulang yang dibutuhkan untuk mengambil data dari server sehingga akan membebankan server. Sedangkan jika kita menggunakan Firebase kita tidak perlu request data untuk mendapatkan sebuah data melainkan server yang akan memberikan data itu ketika ada sebuah perubahan. Contoh ketika kita menggunakan ajax agar realtime maka aplikasi kita akan melakukan request setiap 500ms sekali dengan kata lain 1 second terdapat 2 Request secara berulang ketika ada 100 user dalam waktu 1 Detik maka terdapat 200 request dalam 1 Detik dan terus menerus setiap menit, jam, hari, bulan dan server kita lebih sering Down. Berikut adalah penjelasan yang saya pelajari dan saya pahami.

Nah kalo sudah paham kita lanjutkan tutorialnya. Pertama yang harus kita lakukan adalah menuju ke Firebase Console berikut link nya https://console.firebase.google.com.


Lalu kita buat proyek baru, akan muncul form isian lalu isi nama proyek dan negaranya.


Selanjutnya kita klik menu Database lalu pilih tab Aturan lalu buat menjadi seperti ini :

Lalu klik Publikasikan.

Selanjutnya kita pilih tab Data dan buat Child dengan nama Chat dan Value "" seperti ini :



Oke, settingan untuk aturan sudah selesai sekarang kita menuju menu Overview lalu klik menu Tambahkan Firebase ke aplikasi web Anda. Maka akan muncul popup seperti gambar dan click salin.



Langkah selanjutnya adalah membuat file HTML untuk chat formnya dan jangan lupa menyispkan code dari popup yang sudah kita salin tadi dari firebase, kurang lebih seperti berikut :
 
 <html>  
 <head>  
      <title>Realtime Chat</title>  
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">  
      <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>  
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>  
      <style>  
           .message-bubble   
           {  
                padding: 10px 0px 10px 0px;  
           }  
           .message-bubble:nth-child(even) { background-color: #F5F5F5; }  
           .message-bubble > *  
           {  
                padding-left: 10px;    
           }  
           .panel-body { padding: 0px; }  
           .panel-heading { background-color: #3d6da7 !important; color: white !important; }  
      </style>  
 </head>  
 <body>  
      <div class="container">  
           <div class="row">  
                <div class="panel panel-default">  
                 <div class="panel-heading">Panel heading without title</div>  
                 <div class="panel-body">  
                     <div class="container" id="chat_data">  
                     </div>  
                     <div class="panel-footer">  
                          <div class="row">  
                               <div class="col-md-4">  
                                    <input type="text" id="name" class="form-control">  
                               </div>  
                               <div class="col-md-8">  
                                    <div class="input-group">  
                                     <input type="text" id="msg" class="form-control">  
                                     <span class="input-group-btn">  
                                         <button class="btn btn-default" type="button">Send</button>  
                                     </span>  
                                    </div>  
                               </div>  
                          </div>  
                     </div>  
                 </div>  
                </div>  
           </div>  
      </div>  
      <script src="https://www.gstatic.com/firebasejs/3.6.3/firebase.js"></script>  
      <script>  
           // Initialize Firebase  
           var config = {  
                apiKey: "AIzaSyAmW1Y2cudtWX_jTYUde01-yKz1K-WnMgk",  
                authDomain: "realtime-chat-6c6e4.firebaseapp.com",  
                databaseURL: "https://realtime-chat-6c6e4.firebaseio.com",  
                storageBucket: "realtime-chat-6c6e4.appspot.com",  
                messagingSenderId: "31374372226"  
           };  
           firebase.initializeApp(config);  
           $(document).ready(function(){  
                var rootchatref = firebase.database().ref('/');  
                var chatref = firebase.database().ref('/Chat');  
                chatref.on('child_added', function(snapshot) {  
                     var data = snapshot.val();  
                     //console.log(data);  
                     $('#chat_data').prepend('<div class="row message-bubble"><p class="text-muted">'+data.user+'</p><span>'+data.msg+'</span></div>');  
                });  
           });  
           function writeChat(user, msg) {  
            // A post entry.  
            var postData = {  
                msg : msg,  
                user: user,  
            };  
            // Get a key for a new Post.  
            var newPostKey = firebase.database().ref().child('Chat').push().key;  
            // Write the new post's data simultaneously in the posts list and the user's post list.  
            var updates = {};  
            updates['/Chat/'+newPostKey] = postData;  
            return firebase.database().ref().update(updates);  
           }  
           $("#msg").keypress(function(e) {  
                var name = $('#name').val();  
                var msg = $('#msg').val();  
                if(e.which == 13) {  
                     if(name == ''){  
                          alert('Isi nama terlebih dahulu..');  
                          $('#name').focus();  
                          return false;  
                     }  
                     if(msg == ''){  
                          alert('Pesan tidakk boleh kosong');  
                          $('#msg').focus();  
                          return false;  
                     }  
                     writeChat(name, msg);  
                     $('#msg').val('');  
                }  
           });  
      </script>  
 </body>  
 </html>  

Oke semua sudah selesai. dan untuk mencobanya kita buka 2 Browser untuk membuktikan Jika Chat Ini realtime.



Berhasil dan realtime :D
Mungkin cukup sekian sharingnya kali ini semoga bermanfaat untuk teman-teman semua.

Selamat pagi para developer kali ini saya akan meneruskan tutorial Membuat Material Sliding Tab, yaitu membuat ListView pada Fragment.

Oke langsung saja kita menuju view pada Fragment lalu buat seperti berikut :

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent"  
   tools:context="com.panduseptian.slidingtab.CallsFragment">  
   <ListView  
     android:id="@+id/list"  
     android:layout_width="match_parent"  
     android:layout_height="match_parent">  
   </ListView>  
 </FrameLayout>  

Jika sudah, kita menuju Fragment nya lalu masukan code seperti berikut :

 package com.panduseptian.slidingtab;  
 import android.os.Bundle;  
 import android.support.v4.app.Fragment;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.ViewGroup;  
 import android.widget.AdapterView;  
 import android.widget.ArrayAdapter;  
 import android.widget.ListView;  
 import android.widget.Toast;  
 /**  
  * A simple {@link Fragment} subclass.  
  */  
 public class CallsFragment extends Fragment {  
   public CallsFragment() {  
     // Required empty public constructor  
   }  
   @Override  
   public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                Bundle savedInstanceState) {  
     View rootView = inflater.inflate(R.layout.fragment_calls, container, false);  
     ListView listview =(ListView) rootView.findViewById(R.id.list);  
     final String[] items = new String[] {"Item 1", "Item 2", "Item 3"};  
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);  
     listview.setAdapter(adapter);  
     listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
       @Override  
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {  
         Toast.makeText(getActivity().getApplicationContext(), items[i], Toast.LENGTH_SHORT).show();  
       }  
     });  
     return rootView;  
   }  
 }  

Jika sudah kita run project, maka hasilnya akan seperti berikut :


Mungkin cukup sekian sharing singkatnya, semoga bermanfaat, Terima kasih..

Pandu Septian Gumilar

{picture#http://kekirian.com/wp-content/uploads/2015/12/10419440_814838468537519_2081836625630750537_n-150x150.jpg} YOUR_PROFILE_DESCRIPTION {facebook#YOUR_SOCIAL_PROFILE_URL} {twitter#YOUR_SOCIAL_PROFILE_URL} {google#YOUR_SOCIAL_PROFILE_URL} {pinterest#YOUR_SOCIAL_PROFILE_URL} {youtube#YOUR_SOCIAL_PROFILE_URL} {instagram#YOUR_SOCIAL_PROFILE_URL}
Powered by Blogger.