Firebase Part 1
Firebase Part 1
Seperti sudah bisa anda duga, aplikasi akan tergantung pada Firebase
Auth untuk mengelola pendaftaran pengguna dan masuk. Ini juga akan
menggunakan database real-time Firebase untuk menyimpan pesan grup
chat.
Prasyarat
Untuk dapat mengikuti langkah-demi-langkah tutorial, Anda akan
memerlukan berikut ini:
2. Tambahkan Dependensi
buka build.gradle file dari app modul dan tambahkan
berikut compile dependensi untuk itu:
1 compile 'com.android.support:design:23.4.0'
2 compile 'com.firebaseui:firebase-ui:0.6.0'
Tekan Sync Sekarang tombol untuk memperbarui proyek.
3. Tentukan Layouts
The activity_main.xml file, yang sudah terikat MainActivity ,
mendefinisikan isi dari layar awal aplikasi. Dengan kata lain, itu akan
mewakili chat room.
Seperti kebanyakan lainnya grup chat aplikasi yang tersedia saat ini,
aplikasi kita akan memiliki elemen UI berikut:
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/ic_send_black_24dp"
android:id="@+id/fab"
android:tint="@android:color/white"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
app:fabSize="mini"/>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/fab"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" >
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Input"
android:id="@+id/input" />
</android.support.design.widget.TextInputLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_above="@id/fab"
android:dividerHeight="16dp"
android:divider="@android:color/transparent"
android:id="@+id/list_of_messages"
android:layout_marginBottom="16dp"/>
</RelativeLayout>
Sekarang bahwa tata letak layar awal sudah siap, kita bisa beralih ke
membuat tata letak untuk pesan chat, yang akan menjadi item
dalam ListView . Mulai dengan membuat file layout XML baru yang
disebutmessage.xml , yang unsur akar RelativeLayout .
Tata letak harus memiliki TextView widget untuk menampilkan teks chat
pesan, waktu itu dikirim, dan penulisnya. Anda bebas untuk menempatkan
mereka dalam urutan apapun. Berikut tata letak saya akan menggunakan:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/message_user"
android:textStyle="normal|bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/message_user"
android:layout_alignParentEnd="true"
android:id="@+id/message_time" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/message_user"
android:layout_alignParentStart="true"
android:layout_marginTop="5dp"
android:id="@+id/message_text"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="18sp" />
</RelativeLayout>
if(FirebaseAuth.getInstance().getCurrentUser() == null) {
// Start sign in/sign up activity
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder().build(),
SIGN_IN_REQUEST_CODE
);
} else {
// User is already signed in. Therefore, display
// a welcome Toast
Toast.makeText(this,
"Welcome " + FirebaseAuth.getInstance()
.getCurrentUser()
.getDisplayName(),
Toast.LENGTH_LONG)
.show();
displayChatMessages();
}
Seperti yang Anda lihat dalam kode di atas, jika pengguna sudah masuk,
pertama kita menampilkan Toast menyambut pengguna, dan kemudian
memanggil metode bernama displayChatMessages . Untuk saat ini, hanya
membuat tulisan rintisan untuk itu. Kita akan menambahkan kode untuk
nanti.
private void displayChatMessages() {
Jika kode hasil adalah RESULT_OK , itu berarti pengguna telah masuk
berhasil. Jika demikian, Anda harus
memanggil displayChatMessages() metode lagi. Jika tidak,
panggilan finish() untuk menutup aplikasi.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SIGN_IN_REQUEST_CODE) {
if(resultCode == RESULT_OK) {
Toast.makeText(this,
"Successfully signed in. Welcome!",
Toast.LENGTH_LONG)
.show();
displayChatMessages();
} else {
Toast.makeText(this,
"We couldn't sign you in. Please try again later.",
Toast.LENGTH_LONG)
.show();
finish();
}
}
}
Pada titik ini, Anda dapat menjalankan aplikasi dan melihat pada tanda-in
dan sign-up layar.
Langkah 2: Menangani Pengguna Sign-Out
Secara default, FirebaseUI menggunakan Smart Lock untuk
Sandi . Karena itu, setelah pengguna masuk, mereka akan tetap masuk
bahkan jika aplikasi di-restart. Untuk memungkinkan pengguna untuk
keluar, sekarang kita akan menambahkan opsi tanda-keluar ke menu
luapan MainActivity .
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.menu_sign_out) {
AuthUI.getInstance().signOut(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(MainActivity.this,
"You have been signed out.",
Toast.LENGTH_LONG)
.show();
// Close activity
finish();
}
});
}
return true;
}
Setelah pengguna telah keluar, aplikasi harus menutup secara
otomatis. Itulah alasan mengapa Anda melihat panggilan
ke finish() metode dalam kode di atas.
5. Buat Model
Untuk menyimpan pesan chat di Firebase basis data real-time, Anda harus
membuat model untuk mereka. Tata letak pesan chat, yang kami buat
sebelumnya dalam tutorial ini, memiliki tiga pandangan. Untuk dapat
mengisi pandangan tersebut, model juga harus memiliki setidaknya tiga
bidang.
package id.farahclara.firebasechatapp;
import java.util.Date;
/**
* Created by farah on 21/03/2017.
*/
public ChatMessage(){
Pada titik ini, isi dari displayChatMessages() metode harus seperti ini:
listOfMessages.setAdapter(adapter);