Autentikasi Firebase Android - Login Google

Firebase Authentication menyediakan layanan backend untuk memudahkan penggunaan SDK dan pustaka UI internal untuk mengautentikasi pengguna dalam aplikasi. Sebagian besar aplikasi membutuhkan identitas pengguna, dan setelah mengetahui statusnya, aplikasi menyimpan data pengguna dengan aman di cloud. Hal ini bertujuan untuk membangun sistem otentikasi yang aman.

Dengan Menggunakan Firebase Authentication, kami akan mengautentikasi log-in Google, Facebook, GitHub, Twitter, dan banyak lagi.

Dalam tutorial ini, kami akan mengintegrasikan fungsi Firebase Authentication for Google Sign-In di aplikasi Android kami menggunakan Google dan Firebase API.


Langkah-langkah untuk membuat dan mengonfigurasi Aplikasi Android di Akun Google Firebase

1. Buat akun developer Firebase di https://firebase.google.com/ dan klik 'GO TO CONSOLE'.
2. Klik 'Tambahkan proyek'.
3. Isi nama proyek dan pilih lokasi analitik, lokasi Cloud Firestore, terima persyaratan pengontrol dan klik 'Buat proyek'.
4. Ketika proyek baru Anda berhasil siap klik 'Lanjutkan'.
5. Pilih SDK platform 'Android'.

Autentikasi Firebase


6. Daftarkan aplikasi Anda ke Firebase dengan memberikan informasi aplikasi yang diperlukan dan klik 'Daftar aplikasi'.
Kita bisa mendapatkan kunci SHA-1 sertifikat aplikasi melalui langkah-langkah berikut :

  • Buka proyek Android.
  • Buka tab Gradle dari panel sisi kanan.
  • Klik dua kali pada 'signingReport'.
  • Kami akan menemukan kunci APLIKASI SHA-1 kami di "Konsol Gradle".


7. Sekarang unduh file 'google-services.json' untuk mengintegrasikannya ke dalam aplikasi Android dan klik 'Next'.

Autentikasi Firebase


8. Tambahkan dependensi SDK firebase di file .gradle aplikasi Anda dan klik 'Sinkronkan sekarang' di IDE dan klik 'Next'.

Autentikasi Firebase


build.gradle(Project)

dependencies {  
    classpath 'com.android.tools.build:gradle:3.0.1'  
    classpath 'com.google.gms:google-services:4.0.1'  
 
    // NOTE: Do not place your application dependencies here; they belong  
    // in the individual module build.gradle files  
}  


build.gradle (Module)

dependencies {  
    implementation fileTree(dir: 'libs', include: ['*.jar'])  
    implementation 'com.android.support:appcompat-v7:27.1.1'  
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'  
    testImplementation 'junit:junit:4.12'  
    androidTestImplementation 'com.android.support.test:runner:1.0.2'  
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'  
    implementation 'com.google.firebase:firebase-auth:16.0.3'  
    implementation 'com.google.firebase:firebase-core:16.0.3'  
    implementation 'com.google.android.gms:play-services-auth:16.0.0'  
    implementation 'com.github.bumptech.glide:glide:3.7.0'  
}  
apply plugin: 'com.google.gms.google-services'  


AndroidManifest.xml

Tambahkan izin Internet dalam file AndroidManifest.xml untuk mengakses koneksi jaringan.

<uses-permission android:name="android.permission.INTERNET" />  


9. Jalankan aplikasi Anda untuk memverifikasi konfigurasi instalasi, jika semuanya baik-baik saja itu menampilkan pesan sukses dan kemudian klik 'Lanjutkan ke konsol'.
10. Pada halaman konsol pilih Otentikasi -gt; Metode masuk -gt; Google -gt; Aktifkan dan klik 'Simpan'.

Autentikasi Firebase


Autentikasi Android Firebase dengan Google Sign-In Example

Dalam contoh ini, kita akan mengintegrasikan Autentikasi Firebase dengan Google Sign-In di aplikasi Android kita. Setelah pengguna berhasil login melalui Google Sign-In, kita akan mengautentikasi mereka dengan Firebase Authentication dan kemudian mengarahkan pengguna ke aktivitas berikutnya (ProfileActivity) dan menampilkan detailnya.

Kita perlu menempelkan file 'google-services.json' yang diunduh di direktori aplikasi proyek Android kami.

Tambahkan kode berikut dalam berkas activity_main.xml. Dalam aktivitas ini, kami menerapkan tombol Login Google kustom.

File : activity_main.xml

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="example.android.com.firebasegooglelogin.MainActivity">  
 
    <TextView  
        android:id="@+id/textView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginLeft="20dp"  
        android:layout_marginRight="20dp"  
        android:textSize="20dp"  
        android:text="This is main activity, sign in to move next activity." />  
 
    <com.google.android.gms.common.SignInButton  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:id="@+id/sign_in_button"  
        android:layout_marginLeft="20dp"  
        android:layout_marginRight="20dp"  
        android:layout_alignParentBottom="true"  
        android:layout_marginBottom="20dp">  
 
    </com.google.android.gms.common.SignInButton>  
 
 
</RelativeLayout>  


Tambahkan id klien web Anda dalam file string.xml. Bahkan Anda dapat menggunakan id klien web Google default dalam program.

File : strings.xml

<resources>  
    <string name="app_name">Firebase Google Login</string>  
    <string name="web_client_id">xxxxxxxx..place your web client id here</string>  
</resources>  


Tambahkan kode berikut di kelas MainActivity.java. Fungsi kelas dan metode yang digunakan dalam kelas MainActivity.java diberikan di bawah ini :

  • FirebaseAuth.AuthStateListener(){} baru digunakan sebagai pendengar otentikasi untuk memeriksa apakah pengguna masuk atau tidak. Jika pengguna berhasil masuk, kami menempatkan logika firebase lainnya
  • Metode GoogleSignInOptions.Builder() yang baru mengonfigurasi Google Sign-in untuk mendapatkan data pengguna menggunakan opsi requestEmail.
  • Mengklik tombol Login, ia memanggil Auth.GoogleSignInApi.getSignInIntent (googleApiClient) dan memulai niat dengan startActivityForResult().
  • OnActivityResult() kita mendapatkan hasil dari permintaan Google Sign-in.
  • Jika handleSignInResult(result) mengembalikan true, kita mendapatkan Otentikasi Google menggunakan idToken.
  • Memanggil firebaseAuthWithGoogle (kredensial) untuk membuat Firebase Authentication dengan Google.


Jika autentikasi Firebase berhasil, kita mengalihkan pengguna ke aktivitas berikutnya (ProfileActivity.java).

File : MainActivity.java

package example.android.com.firebasegooglelogin;  
 
import android.content.Intent;  
import android.support.annotation.NonNull;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.Toast;  
 
import com.google.android.gms.auth.api.Auth;  
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;  
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;  
import com.google.android.gms.auth.api.signin.GoogleSignInResult;  
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.android.gms.tasks.OnCompleteListener;  
import com.google.android.gms.tasks.Task;  
import com.google.firebase.auth.AuthCredential;  
import com.google.firebase.auth.AuthResult;  
import com.google.firebase.auth.FirebaseAuth;  
import com.google.firebase.auth.FirebaseUser;  
import com.google.firebase.auth.GoogleAuthProvider;  
 
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {  
 
    private static final String TAG = "MainActivity";  
    private SignInButton signInButton;  
    private GoogleApiClient googleApiClient;  
    private static final int RC_SIGN_IN = 1;  
    String name, email;  
    String idToken;  
    private FirebaseAuth firebaseAuth;  
    private FirebaseAuth.AuthStateListener authStateListener;  
 
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
 
        firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance();  
        //this is where we start the Auth state Listener to listen for whether the user is signed in or not  
        authStateListener = new FirebaseAuth.AuthStateListener(){  
            @Override  
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {  
                // Get signedIn user  
                FirebaseUser user = firebaseAuth.getCurrentUser();  
 
                //if user is signed in, we call a helper method to save the user details to Firebase  
                if (user != null) {  
                    // User is signed in  
                    // you could place other firebase code  
                    //logic to save the user details to Firebase  
                    Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());  
                } else {  
                    // User is signed out  
                    Log.d(TAG, "onAuthStateChanged:signed_out");  
                }  
            }  
        };  
 
        GoogleSignInOptions gso =  new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
                .requestIdToken(getString(R.string.web_client_id))//you can also use R.string.default_web_client_id  
                .requestEmail()  
                .build();  
        googleApiClient=new GoogleApiClient.Builder(this)  
                .enableAutoManage(this,this)  
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)  
                .build();  
 
        signInButton = findViewById(R.id.sign_in_button);  
        signInButton.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);  
                startActivityForResult(intent,RC_SIGN_IN);  
            }  
        });  
    }  
 
    @Override  
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {  
 
    }  
 
    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        super.onActivityResult(requestCode, resultCode, data);  
        if(requestCode==RC_SIGN_IN){  
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);  
            handleSignInResult(result);  
        }  
    }  
 
    private void handleSignInResult(GoogleSignInResult result){  
        if(result.isSuccess()){  
            GoogleSignInAccount account = result.getSignInAccount();  
            idToken = account.getIdToken();  
            name = account.getDisplayName();  
            email = account.getEmail();  
            // you can store user data to SharedPreference  
            AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);  
            firebaseAuthWithGoogle(credential);   
        }else{  
            // Google Sign In failed, update UI appropriately  
            Log.e(TAG, "Login Unsuccessful. "+result);  
            Toast.makeText(this, "Login Unsuccessful", Toast.LENGTH_SHORT).show();  
        }  
    }  
    private void firebaseAuthWithGoogle(AuthCredential credential){  
 
        firebaseAuth.signInWithCredential(credential)  
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {  
                    @Override  
                    public void onComplete(@NonNull Task<AuthResult> task) {  
                        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());  
                        if(task.isSuccessful()){  
                            Toast.makeText(MainActivity.this, "Login successful", Toast.LENGTH_SHORT).show();  
                            gotoProfile();  
                        }else{  
                            Log.w(TAG, "signInWithCredential" + task.getException().getMessage());  
                            task.getException().printStackTrace();  
                            Toast.makeText(MainActivity.this, "Authentication failed.",  
                                    Toast.LENGTH_SHORT).show();  
                        }  
 
                    }  
                });  
    }  
 
 
 
 
    private void gotoProfile(){  
        Intent intent = new Intent(MainActivity.this, ProfileActivity.class);  
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);  
        startActivity(intent);  
        finish();  
    }  
    @Override  
    protected void onStart() {  
        super.onStart();  
        if (authStateListener != null){  
            FirebaseAuth.getInstance().signOut();  
        }  
        firebaseAuth.addAuthStateListener(authStateListener);  
    }  
 
    @Override  
    protected void onStop() {  
        super.onStop();  
        if (authStateListener != null){  
            firebaseAuth.removeAuthStateListener(authStateListener);  
        }  
    }  
 
}  


Tambahkan kode berikut dalam berkas profile_activity.xml. ImageView digunakan untuk menampilkan gambar profil pengguna, TextView adalah untuk nama, email, id dan tombol untuk log-out.

File : profile_activity.xml

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="example.android.com.firebasegooglelogin.ProfileActivity">  
 
 
        <LinearLayout  
            android:layout_width="match_parent"  
            android:layout_height="match_parent"  
            android:gravity="center"  
            android:orientation="vertical">  
            <ImageView  
                android:layout_width="80dp"  
                android:layout_height="80dp"  
                android:id="@+id/profileImage"  
                />  
            <TextView  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:id="@+id/name"  
                android:text="name"  
                android:textSize="20dp"  
                android:layout_marginTop="20dp"/>  
            <TextView  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:id="@+id/email"  
                android:textSize="20dp"  
                android:text="email"  
                android:layout_marginTop="20dp"/>  
            <TextView  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:id="@+id/userId"  
                android:textSize="20dp"  
                android:text="id"  
                android:layout_marginTop="20dp"/>  
            <Button  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:id="@+id/logoutBtn"  
                android:text="Logout"  
                android:layout_marginTop="30dp"/>  
        </LinearLayout>  
</RelativeLayout>  


Di kelas ProfileActivity.java ini, kita mendapatkan informasi pengguna dan menampilkannya. Kelas GoogleSignInResult mengimplementasikan antarmuka Result yang mewakili hasil akhir dari penerapan metode API Google Play Services.

Kelas GoogleSignInAccount menyimpan informasi yang diperlukan pengguna.

File : ProfileActivity.java

package example.android.com.firebasegooglelogin;  
 
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 android.widget.ImageView;  
import android.widget.TextView;  
import android.widget.Toast;  
 
import com.bumptech.glide.Glide;  
import com.google.android.gms.auth.api.Auth;  
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;  
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;  
import com.google.android.gms.auth.api.signin.GoogleSignInResult;  
import com.google.android.gms.common.ConnectionResult;  
import com.google.android.gms.common.api.GoogleApiClient;  
import com.google.android.gms.common.api.OptionalPendingResult;  
import com.google.android.gms.common.api.ResultCallback;  
import com.google.android.gms.common.api.Status;  
import com.google.firebase.auth.FirebaseAuth;  
 
public class ProfileActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {  
    Button logoutBtn;  
    TextView userName,userEmail,userId;  
    ImageView profileImage;  
    private GoogleApiClient googleApiClient;  
    private GoogleSignInOptions gso;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_profile);  
 
        logoutBtn = findViewById(R.id.logoutBtn);  
        userName = findViewById(R.id.name);  
        userEmail = findViewById(R.id.email);  
        userId = findViewById(R.id.userId);  
        profileImage = findViewById(R.id.profileImage);  
 
        gso =  new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
                .requestEmail()  
                .build();  
 
        googleApiClient=new GoogleApiClient.Builder(this)  
                .enableAutoManage(this,this)  
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)  
                .build();  
 
 
        logoutBtn.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                FirebaseAuth.getInstance().signOut();  
                Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(  
                        new ResultCallback<Status>() {  
                            @Override  
                            public void onResult(Status status) {  
                                if (status.isSuccess()){  
                                    gotoMainActivity();  
                                }else{  
                                    Toast.makeText(getApplicationContext(),"Session not close",Toast.LENGTH_LONG).show();  
                                }  
                            }  
                        });  
            }  
        });  
    }  
 
    @Override  
    protected void onStart() {  
        super.onStart();  
        OptionalPendingResult<GoogleSignInResult> opr= Auth.GoogleSignInApi.silentSignIn(googleApiClient);  
        if(opr.isDone()){  
            GoogleSignInResult result=opr.get();  
            handleSignInResult(result);  
        }else{  
            opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {  
                @Override  
                public void onResult(@NonNull GoogleSignInResult googleSignInResult) {  
                    handleSignInResult(googleSignInResult);  
                }  
            });  
        }  
    }  
    private void handleSignInResult(GoogleSignInResult result){  
        if(result.isSuccess()){  
            GoogleSignInAccount account=result.getSignInAccount();  
            userName.setText(account.getDisplayName());  
            userEmail.setText(account.getEmail());  
            userId.setText(account.getId());  
            try{  
                Glide.with(this).load(account.getPhotoUrl()).into(profileImage);  
            }catch (NullPointerException e){  
                Toast.makeText(getApplicationContext(),"image not found",Toast.LENGTH_LONG).show();  
            }  
 
        }else{  
            gotoMainActivity();  
        }  
    }  
    private void gotoMainActivity(){  
        Intent intent=new Intent(this,MainActivity.class);  
        startActivity(intent);  
    }  
    @Override  
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {  
 
    }  
}  


Output :

Autentikasi Firebase
Autentikasi Firebase


Berlangganan update artikel terbaru via email:

0 Response to "Autentikasi Firebase Android - Login Google"

Posting Komentar

Iklan Atas Artikel

Iklan Bawah Artikel