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

Tambahkan proses masuk dengan mudah ke aplikasi Android Anda dengan FirebaseUI

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

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

  3. 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.

  4. 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.

  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:

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

  1. 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.

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

  4. Anda dapat mengaktifkan masuk tautan 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 daftar putih setUrl , 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);
  5. 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.

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