Anda dapat mengizinkan pengguna untuk melakukan autentikasi dengan Firebase menggunakan Akun Google pengguna tersebut, dengan mengintegrasikan Login dengan Google ke dalam aplikasi Anda.
Sebelum memulai
- Tambahkan Firebase ke project Android jika Anda belum melakukannya.
- Dalam file
build.gradle
level project, pastikan Anda memasukkan repositori Maven Google di bagianbuildscript
danallprojects
. Tambahkan dependensi untuk library Android Firebase Authentication dan layanan Google Play ke file Gradle modul (level aplikasi) Anda (biasanya berupa
app/build.gradle
):implementation 'com.google.firebase:firebase-auth:19.1.0' implementation 'com.google.android.gms:play-services-auth:17.0.0'
Jika Anda belum menentukan sidik jari SHA-1 aplikasi, lakukanlah dari halaman Setelan di Firebase console. Baca artikel Mengautentikasi Klien Anda untuk mengetahui detail tentang cara mendapatkan sidik jari SHA-1 aplikasi.
- Aktifkan Login dengan Google di Firebase console:
- Di Firebase console, buka bagian Auth.
- Di tab Metode login, aktifkan metode login dengan Google, lalu klik Simpan.
Melakukan Autentikasi dengan Firebase
- Integrasikan Login dengan Google ke aplikasi Anda dengan mengikuti langkah-langkah di halaman Mengintegrasikan Login dengan Google ke Aplikasi Android Anda.
Saat Anda mengonfigurasi objek
GoogleSignInOptions
, panggilrequestIdToken
:Java
// Configure Google Sign In GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build();
Kotlin
// Configure Google Sign In val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build()
requestIdToken
. Untuk mencari client ID OAuth 2.0:- Buka halaman Kredensial di GCP Console.
- Client ID jenis Aplikasi web adalah client ID OAuth 2.0 server backend Anda.
Java
private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { // Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = task.getResult(ApiException.class); firebaseAuthWithGoogle(account); } catch (ApiException e) { // Google Sign In failed, update UI appropriately Log.w(TAG, "Google sign in failed", e); // ... } } }
Kotlin
private fun signIn() { val signInIntent = googleSignInClient.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) }
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { val task = GoogleSignIn.getSignedInAccountFromIntent(data) try { // Google Sign In was successful, authenticate with Firebase val account = task.getResult(ApiException::class.java) firebaseAuthWithGoogle(account!!) } catch (e: ApiException) { // Google Sign In failed, update UI appropriately Log.w(TAG, "Google sign in failed", e) // ... } } }
- Dalam metode
onCreate
aktivitas login Anda, dapatkan instance bersama dari objekFirebaseAuth
:Java
private FirebaseAuth mAuth;// ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
Kotlin
private lateinit var auth: FirebaseAuth// ... // Initialize Firebase Auth auth = FirebaseAuth.getInstance()
- Saat menginisialisasi Aktivitas Anda, periksa apakah pengguna saat ini sedang login:
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
- Setelah pengguna berhasil login, dapatkan token ID dari objek
GoogleSignInAccount
, tukarkan dengan kredensial Firebase, lalu lakukan autentikasi dengan Firebase menggunakan kredensial tersebut:Java
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Snackbar.make(findViewById(R.id.main_layout), "Authentication Failed.", Snackbar.LENGTH_SHORT).show(); updateUI(null); } // ... } }); }
Kotlin
private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) { Log.d(TAG, "firebaseAuthWithGoogle:" + acct.id!!) val credential = GoogleAuthProvider.getCredential(acct.idToken, null) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Snackbar.make(main_layout, "Authentication Failed.", Snackbar.LENGTH_SHORT).show() updateUI(null) } // ... } }
signInWithCredential
berhasil, Anda dapat menggunakan metodegetCurrentUser
untuk mendapatkan data akun pengguna.
Langkah berikutnya
Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.
-
Di aplikasi yang dimiliki, Anda bisa mendapatkan informasi profil dasar pengguna dari objek
FirebaseUser
. Baca bagian Mengelola Pengguna. Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik yang login dari variabel
auth
, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.
Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.
Agar pengguna logout, panggil signOut
:
Java
FirebaseAuth.getInstance().signOut();
Kotlin
FirebaseAuth.getInstance().signOut()