Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Tambahkan proses masuk dengan mudah ke aplikasi Android Anda dengan FirebaseUI

FirebaseUI adalah library yang dibangun di atas Firebase Authentication SDK yang menyediakan alur UI drop-in untuk digunakan di aplikasi Anda. FirebaseUI memberikan manfaat berikut:

  • Beberapa Penyedia - alur masuk untuk email/kata sandi, tautan email, autentikasi telepon, Masuk dengan Google, Masuk Facebook, Masuk Twitter, dan Masuk GitHub.
  • Manajemen Akun - alur untuk menangani tugas manajemen akun, seperti pembuatan akun dan pengaturan ulang kata sandi.
  • Penautan Akun - mengalir untuk menautkan akun pengguna dengan aman di seluruh penyedia identitas.
  • Peningkatan Pengguna Anonim - mengalir untuk meningkatkan pengguna anonim dengan aman.
  • Tema Kustom - sesuaikan tampilan FirebaseUI agar sesuai dengan aplikasi Anda. Selain itu, karena FirebaseUI adalah open source, Anda dapat melakukan fork proyek dan menyesuaikannya dengan kebutuhan Anda.
  • Smart Lock untuk Kata Sandi - integrasi otomatis dengan Smart Lock untuk Kata Sandi untuk masuk lintas perangkat dengan cepat.

Sebelum kamu memulai

  1. Jika Anda belum melakukannya, tambahkan Firebase ke proyek Android Anda .

  2. Tambahkan dependensi untuk FirebaseUI ke file build.gradle tingkat aplikasi Anda. Jika Anda ingin mendukung proses 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 SDK Firebase dan SDK layanan Google Play.

  3. Di Firebase console , buka bagian Otentikasi dan aktifkan metode masuk yang ingin Anda dukung. Beberapa metode masuk memerlukan informasi tambahan, biasanya tersedia di konsol pengembang layanan.

  4. Jika Anda mendukung Login dengan Google dan belum menentukan sidik jari SHA-1 aplikasi Anda, lakukan dari halaman Setelan di Firebase console. Lihat Mengautentikasi Klien Anda untuk detail tentang cara mendapatkan sidik jari SHA-1 aplikasi Anda.

  5. 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:

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);
            }
        }
);

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
        FirebaseAuthUIActivityResultContract()
) { res ->
    this.onSignInResult(res)
}

Untuk memulai alur masuk FirebaseUI, buat maksud masuk dengan metode masuk pilihan Anda:

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);

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)

Saat alur masuk selesai, Anda akan menerima hasilnya di onSignInResult :

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.
        // ...
    }
}

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.
        // ...
    }
}

Siapkan metode masuk

  1. Di Firebase console , buka bagian Otentikasi . Pada tab Metode masuk , aktifkan penyedia Email/Kata Sandi . Perhatikan bahwa masuk email/sandi harus diaktifkan untuk menggunakan masuk tautan email.

  2. Di bagian yang sama, aktifkan metode masuk tautan Email (masuk tanpa kata sandi) dan klik Simpan .

  3. Anda juga harus mengaktifkan Firebase Dynamic Links untuk menggunakan email-link sign in. Di Firebase console , klik Dynamic Links di bagian Engage di bilah navigasi. Klik Memulai dan menambahkan domain. Domain yang Anda pilih di sini akan tercermin dalam tautan email yang dikirim ke pengguna Anda.

  4. Anda dapat mengaktifkan login link email di FirebaseUI dengan memanggil enableEmailLinkSignIn pada instance EmailBuilder . Anda juga perlu menyediakan objek ActionCodeSettings yang valid dengan setHandleCodeInApp disetel ke true. Selain itu, Anda perlu memasukkan URL yang Anda berikan ke setUrl , yang dapat dilakukan di Firebase console , di bawah Authentication -> Sign in Methods -> Authorized domains.

    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);

    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)
  5. Jika Anda ingin menangkap tautan dalam aktivitas tertentu, ikuti langkah-langkah yang diuraikan di sini . Jika tidak, tautan akan dialihkan ke aktivitas peluncur Anda.

  6. Setelah Anda mengetahui tautan dalam, Anda perlu menelepon untuk memverifikasi bahwa kami dapat menanganinya untuk Anda. Jika kami bisa, Anda harus meneruskannya kepada kami melalui setEmailLink .

    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);
        }
    }

    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)
        }
    }
  7. 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 instance EmailBuilder .

    Lihat FirebaseUI-Web dan FirebaseUI-iOS untuk informasi selengkapnya.

Keluar

FirebaseUI menyediakan metode praktis untuk keluar dari Firebase Authentication serta semua penyedia identitas sosial:

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

Anda juga dapat menghapus akun pengguna sepenuhnya:

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

Kustomisasi

Secara default, FirebaseUI menggunakan AppCompat untuk 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:

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);

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)

Anda juga dapat mengatur kebijakan privasi khusus dan persyaratan layanan:

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build();
signInLauncher.launch(signInIntent);

Kotlin+KTX

val 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 menggunakan dan menyesuaikan FirebaseUI, lihat file README di GitHub.
  • Jika Anda menemukan masalah di FirebaseUI dan ingin melaporkannya, gunakan pelacak masalah GitHub .