FirebaseUI adalah pustaka yang dibuat di atas Firebase Authentication SDK yang menyediakan alur UI drop-in untuk digunakan di aplikasi Anda. FirebaseUI memberikan manfaat berikut:
- Banyak Penyedia - alur masuk untuk email/kata sandi, tautan email, autentikasi telepon, Masuk dengan Google, Masuk dengan Facebook, Masuk dengan Twitter, dan Masuk dengan GitHub.
- Manajemen Akun - alur untuk menangani tugas manajemen akun, seperti pembuatan akun dan pengaturan ulang kata sandi.
- Penautan Akun - alur untuk menautkan akun pengguna dengan aman di seluruh penyedia identitas.
- Peningkatan Pengguna Anonim - alur untuk memutakhirkan pengguna anonim dengan aman.
- Tema Khusus - sesuaikan tampilan FirebaseUI agar cocok dengan aplikasi Anda. Selain itu, karena FirebaseUI adalah open source, Anda dapat membagi proyek dan menyesuaikannya sesuai kebutuhan Anda.
- Smart Lock untuk Kata Sandi - integrasi otomatis dengan Smart Lock untuk Kata Sandi untuk masuk lintas perangkat dengan cepat.
Sebelum kamu memulai
Jika Anda belum melakukannya, tambahkan Firebase ke proyek Android Anda .
Tambahkan dependensi untuk FirebaseUI ke file
build.gradle
tingkat aplikasi Anda. Jika Anda ingin mendukung masuk dengan Facebook atau Twitter, sertakan juga SDK Facebook dan Twitter:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:7.2.0' // Required only if Facebook login support is required // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94 implementation 'com.facebook.android:facebook-android-sdk:8.x' }
FirebaseUI Auth SDK memiliki dependensi transitif pada Firebase SDK dan SDK layanan Google Play.
Di konsol Firebase , buka bagian Otentikasi dan aktifkan metode masuk yang ingin Anda dukung. Beberapa metode masuk memerlukan informasi tambahan, biasanya tersedia di konsol pengembang layanan.
Jika Anda mendukung Masuk dengan Google dan belum menentukan sidik jari SHA-1 aplikasi Anda, lakukan dari laman Setelan konsol Firebase. Lihat Mengautentikasi Klien Anda untuk detail tentang cara mendapatkan sidik jari SHA-1 aplikasi Anda.
Jika Anda mendukung masuk dengan Facebook atau Twitter, tambahkan sumber daya string ke
strings.xml
yang menentukan informasi pengenal yang diperlukan oleh setiap penyedia:<resources> <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). --> <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string> <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string> </resources>
Masuk
Buat ActivityResultLauncher
yang mendaftarkan panggilan balik untuk kontrak hasil Aktivitas FirebaseUI:
Kotlin+KTX
// See: https://developer.android.com/training/basics/intents/result private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract() ) { res -> this.onSignInResult(res) }
Java
// See: https://developer.android.com/training/basics/intents/result private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new FirebaseAuthUIActivityResultContract(), new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() { @Override public void onActivityResult(FirebaseAuthUIAuthenticationResult result) { onSignInResult(result); } } );
Untuk memulai alur masuk FirebaseUI, buat maksud masuk dengan metode masuk pilihan Anda:
Kotlin+KTX
// Choose authentication providers val providers = arrayListOf( AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.PhoneBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build(), AuthUI.IdpConfig.FacebookBuilder().build(), AuthUI.IdpConfig.TwitterBuilder().build()) // Create and launch sign-in intent val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
// Choose authentication providers List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder().build(), new AuthUI.IdpConfig.PhoneBuilder().build(), new AuthUI.IdpConfig.GoogleBuilder().build(), new AuthUI.IdpConfig.FacebookBuilder().build(), new AuthUI.IdpConfig.TwitterBuilder().build()); // Create and launch sign-in intent Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Saat alur masuk selesai, Anda akan menerima hasilnya di onSignInResult
:
Kotlin+KTX
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) { val response = result.idpResponse if (result.resultCode == RESULT_OK) { // Successfully signed in val user = FirebaseAuth.getInstance().currentUser // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
Java
private void onSignInResult(FirebaseAuthUIAuthenticationResult result) { IdpResponse response = result.getIdpResponse(); if (result.getResultCode() == RESULT_OK) { // Successfully signed in FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
Siapkan metode masuk
Autentikasi tautan email
Di konsol Firebase , buka bagian Otentikasi . Pada tab Metode masuk , aktifkan penyedia Email/Kata Sandi . Perhatikan bahwa masuk email/sandi harus diaktifkan untuk menggunakan masuk tautan email.
Di bagian yang sama, aktifkan metode masuk tautan Email (masuk tanpa kata sandi) dan klik Simpan .
Anda juga harus mengaktifkan Firebase Dynamic Links untuk menggunakan email-link sign in. Di Firebase console , klik Dynamic Links di bawah Engage di bilah navigasi. Klik Memulai dan tambahkan domain. Domain yang Anda pilih di sini akan tercermin dalam tautan email yang dikirim ke pengguna Anda.
Anda dapat mengaktifkan masuk tautan email di FirebaseUI dengan memanggil
enableEmailLinkSignIn
pada instanceEmailBuilder
. Anda juga perlu menyediakan objekActionCodeSettings
yang valid dengansetHandleCodeInApp
disetel ke true. Selain itu, Anda perlu memasukkan URL yang Anda berikan ke daftar putihsetUrl
, yang dapat dilakukan di konsol Firebase , di bawah Authentication -> Sign in Methods -> Authorized domains.Kotlin+KTX
val actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( /* yourPackageName= */ "...", /* installIfNotAvailable= */ true, /* minimumVersion= */ null) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build() val providers = listOf( EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ) val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( /* yourPackageName= */ "...", /* installIfNotAvailable= */ true, /* minimumVersion= */ null) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build(); List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ); Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Jika Anda ingin menangkap tautan dalam aktivitas tertentu, ikuti langkah-langkah yang diuraikan di sini . Jika tidak, tautan tersebut akan dialihkan ke aktivitas peluncur Anda.
Setelah Anda mendapatkan tautan dalam, Anda harus menelepon verifikasi bahwa kami dapat menanganinya untuk Anda. Jika kami bisa, Anda harus meneruskannya kepada kami melalui
setEmailLink
.Kotlin+KTX
if (AuthUI.canHandleIntent(intent)) { val extras = intent.extras ?: return val link = extras.getString("email_link_sign_in") if (link != null) { val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent) } }
Java
if (AuthUI.canHandleIntent(getIntent())) { if (getIntent().getExtras() == null) { return; } String link = getIntent().getExtras().getString("email_link_sign_in"); if (link != null) { Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent); } }
Masuk tautan email lintas perangkat opsional didukung, yang berarti bahwa tautan yang dikirim melalui aplikasi Android Anda dapat digunakan untuk masuk di web atau aplikasi Apple Anda. Secara default, dukungan lintas perangkat diaktifkan. Anda dapat menonaktifkannya dengan memanggil
setForceSameDevice
pada instanceEmailBuilder
.Lihat FirebaseUI-Web dan FirebaseUI-iOS untuk informasi selengkapnya.
Keluar
FirebaseUI menyediakan metode mudah untuk keluar dari Firebase Authentication serta semua penyedia identitas sosial:
Kotlin+KTX
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
Anda juga dapat sepenuhnya menghapus akun pengguna:
Kotlin+KTX
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
Kustomisasi
Secara default, FirebaseUI menggunakan AppCompat untuk pembuatan tema, yang berarti secara alami akan mengadopsi skema warna aplikasi Anda. Jika Anda memerlukan penyesuaian lebih lanjut, Anda dapat meneruskan tema dan logo ke pembuat Intent
masuk:
Kotlin+KTX
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build(); signInLauncher.launch(signInIntent);
Anda juga dapat menetapkan kebijakan privasi khusus dan ketentuan layanan:
Kotlin+KTX
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build(); signInLauncher.launch(signInIntent);
Langkah selanjutnya
- Untuk informasi selengkapnya tentang penggunaan dan penyesuaian FirebaseUI, lihat file README di GitHub.
- Jika Anda menemukan masalah di FirebaseUI dan ingin melaporkannya, gunakan pelacak masalah GitHub .