Cara Autentikasi Menggunakan Akun Google pada Firebase
Pada tutorial kali ini, saya akan mengajarkan pada kalian bagaimana cara agar aplikasi yang kita buat dapat login/masuk dengan menggunakan akun google. Didalam Firebase menyediakan banyak sekali metode masuk untuk Autentikasi pada Aplikasi, seperti Email, Twitter, Facbook, GitHub, Ponsel, dsb.
Sala satu metode masuk yang akan kita bahas yaitu, dengan menggunakan akun Google, untuk itu sebelumnya kita harus menyiapkan atau membuat akun google terlebih dahulu.
Aplikasi-aplikasi sekarang ini, banyak sekali yang menggunakan akun google sebagai alternaif metode untuk masuk kedalam sebuah aplikasi, dikarenakan popularitas akun Goolge semakin tinggi, untuk itu tidak ada salahnya jika kita menggunakan Autentikasi Google pada Proyek aplikasi kita.
Materi lainnya yang direkomendasikan:
- Cara Autentikasi Menggunakan Nomor Telepon pada Firebase
- Firebase Analytics: Events dan User Properties
Cara Autentikasi Menggunakan Akun Google pada Firebase
1) Pertama-tama, kita harus menambahkan Firebase kedalam Project Aplikasi,Untuk Tutorialnya kalian bisa lihat Disini
.
2) Buka Dashboard Firebase kalian, pilih Authentication > Metode Masuk > Pilih Google, lalu Aktifkan > Simpan.
3) Didalam project aplikasi kalian, buka file build.gradle (direkori app), tambahkan kedua library berikut ini, didalam dependencies.
compile 'com.google.firebase:firebase-auth:11.8.0'
compile 'com.google.android.gms:play-services-auth:11.8.0'
Kedua library tersebut digunakan untuk Autentikasi pada Firebase.4) Jangan lupa untuk menambahkan kedua permission berikut ini didalam AndroidManifest.xml kalian.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
5) Buat pada activity_main.xml yang digunakan untuk login, disini kita akan menggunakan SignInButton, dan juga komponen tambahan seperti TextView.<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_margin="28dp"
android:gravity="center"
android:orientation="vertical"
tools:context="cianjur.developer.net.firebaseexample.login">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Masuk Dengan"
android:textSize="15sp"
android:textStyle="bold" />
<com.google.android.gms.common.SignInButton
android:id="@+id/login_google"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp">
</com.google.android.gms.common.SignInButton>
</LinearLayout>
View:6) Buka file MainActivity.java kalian, pertama kita akan mendeklarasikan beberapa variable yang digunakan untuk kebutuhan Autentikasi, dan juga persiapkan beberapa method seperti berikut ini.
package cianjur.developer.net.firebaseexample;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.firebase.auth.FirebaseAuth;
public class login extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener{
//Deklarasi Variable
ProgressDialog progressDialog; //Membuat kemajuan/progres saat login
private SignInButton googleButton; //Sebuah Tombol khusus Untuk Login
private GoogleSignInOptions GSO; //Untuk Konfigurasi Google SignIn
private GoogleApiClient mGoogleApiClient; //Membuat API/Antarmuka Untuk Client
private FirebaseAuth firebaseAuth; //Untuk Autentifikasi
private FirebaseAuth.AuthStateListener authStateListener; //Untuk Menangani Kajadian Saat Autentifikasi
private final int RC_SIGN_ID = 9001; //Kode Unik Untuk SignIn
private final String TAG = "SignInAcivity"; //Untuk Log Debugging
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
googleButton = findViewById(R.id.login_google);
FirebaseConnect();
googleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SignIn();
}
});
}
//Kumpulan Konfigurasi Untuk Menghubungkan dengan Firebase
private void FirebaseConnect(){
//Statement
}
//Konfiurasi Untuk Masuk ke Akun Google
private void SignIn(){
//Statement
}
//Untuk Mengangani Kejadian Saat Pengguna Berhasil Login
private void firebaseAuthWithGoogle(GoogleSignInAccount account){
}
//Menagani Kejadian Saat Gagal Koneksi
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
//Statement
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
}
7) Buat Class dan Activiy baru, berinama, misalnya "main_menu", Kita akan berpidah pada Activity tersebut jika user berhasil login.<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_margin="16dp"
android:gravity="center"
android:orientation="vertical"
tools:context="cianjur.developer.net.firebaseexample.main_menu">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Selamat Datang Di WILDAN TECHNO ART"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Keluar" />
</LinearLayout>
8) Selanjutnya buka lagi MainActivity untuk login tadi, didalam method FirebaseConnect(), masukan source code berikut ini:private void FirebaseConnect(){
firebaseAnalytics = FirebaseAnalytics.getInstance(this); //Menghubungkan dengan Firebase Analytics
firebaseAuth = FirebaseAuth.getInstance(); //Menghubungkan dengan Firebase Authentifikasi
progressDialog = new ProgressDialog(this); //Sebuah ProgressDialog untuk menandakan program sedang dieksekusi
//Authentifikasi Listener
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
/*
* Jika User sebelumnya telah masuk/login dan belum keluar/logout, secara otomatis
* Saat aplikasi dibuka kembali, Activity ini akan langsung dialihkan pada Activiy MainMenu
*/
if(firebaseAuth.getCurrentUser() != null){
startActivity(new Intent(login.this,main_menu.class));
finish();
}
}
};
// Konfigurasi GoogleSignIn, Dengan cara bagaimanakah User akan Masuk
GSO = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext())
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, GSO)
.build();
}
9) Masukan kode berikut ini didalam method onStart() dan onStop(). @Override
protected void onStart() {
super.onStart();
//Jika User Telah Masuk/Login, makan akan mengangani kajadian apakah user telah masuk
firebaseAuth.addAuthStateListener(authStateListener);
}
//Saat Aktifitas dihentikan, maka listener akan dihapus
@Override
protected void onStop() {
super.onStop();
if(authStateListener != null){
firebaseAuth.removeAuthStateListener(authStateListener);
}
}
10) Selanjutnya didalam method SignIn(), saat tombol signIn di klik, maka user diminta untuk menentukan/memilih alamat email yang akan digunakan untuk login.//Konfiurasi Untuk Masuk ke Akun Google
private void SignIn(){
Intent GSignIN = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(GSignIN, RC_SIGN_ID);
progressDialog.setMessage("Mohon Tunggu...");
progressDialog.setIndeterminate(true);
progressDialog.show();
}
11) Didalam method onActivityResult(), masukan source code berikut ini: @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Mendapatkan Akses untuk SignIn/Masuk Jika permintaan dari Firebase Autentifikasi Terpenuhi
if (requestCode == RC_SIGN_ID) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if(result.isSuccess()){
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
}else {
progressDialog.dismiss();
}
}else{
progressDialog.dismiss();
}
}
12) Didalam method onConnectionFailed(), kita cukup menambahkan baris kode berikut ini, untuk menangani kejadian jika koneksi gagal terhubung.//Menagani Kejadian Saat Gagal Koneksi
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.d(TAG, "OnConnectionFailed" + connectionResult);
progressDialog.dismiss();
Toast.makeText(getApplicationContext(),"Koneksi Tidak Terhubung", Toast.LENGTH_SHORT).show();
}
13) Setelah pengguna berhasil login, maka akan mendapatkan token ID dari objek GoogleSignInAccount, token tersebut akan ditukarkan dengan kredensial Firebase, setelah itu lakukan autentikasi dengan Firebase menggunakan kredensial tersebut. private void firebaseAuthWithGoogle(GoogleSignInAccount account){
Log.d(TAG, "firebaseAuthWithGoogle:" + account.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(getApplicationContext(),"Autentikasi Berhasil", Toast.LENGTH_SHORT).show();
finish();
}else {
Toast.makeText(getApplicationContext(),"Autentikasi Gagal", Toast.LENGTH_SHORT).show();
}
progressDialog.dismiss();
}
});
}
Saat User berhasil login, makan akan berpindah pada activity main_menu.Untuk Logout/Keluar, kalian dapat menambahkan baris kode berikut ini pada button didalam Activity min_menu.
package cianjur.developer.net.firebaseexample;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.firebase.auth.FirebaseAuth;
public class main_menu extends AppCompatActivity {
private FirebaseAuth auth;
private FirebaseAuth.AuthStateListener authStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
Button Keluar = findViewById(R.id.logout);
auth = FirebaseAuth.getInstance(); //Menghubungkan dengan Firebase Authentifikasi
//Authentifikasi Listener
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
/*
* Jika User sebelumnya telah keluar/logout
* Saat aplikasi dibuka kembali, Activity ini akan langsung dialihkan pada Activity Login
*/
if(firebaseAuth.getCurrentUser() == null){
startActivity(new Intent(main_menu.this, login.class));
finish();
}
}
};
Keluar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Digunakan Untuk Logout
auth.signOut();
}
});
}
@Override
protected void onStart() {
super.onStart();
auth.addAuthStateListener(authStateListener);
}
@Override
protected void onStop() {
super.onStop();
if(authStateListener != null){
auth.removeAuthStateListener(authStateListener);
}
}
}
Demo:Terimakasih atas kunjungannya, semoga tutorial yang saya berikan bisa bermanfaat untuk kalian semua, selebihnya, mohon maaf bila ada kesalahan.
Wassalamualaikum Warahmatullahi Wabarakatuh.