Buka konsol

Menambahkan login secara mudah ke aplikasi Android 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 login untuk email/sandi, link email, autentikasi telepon, Login dengan Google, Login dengan Facebook, Login dengan Twitter, dan Login dengan GitHub.
  • Manajemen Akun - alur untuk menangani tugas pengelolaan akun, seperti pembuatan akun dan penyetelan ulang sandi.
  • Penautan Akun: alur untuk menautkan akun pengguna secara aman di seluruh penyedia identitas.
  • Upgrade Pengguna Anonim - alur untuk mengupgrade pengguna anonim dengan aman.
  • Tema Khusus - sesuaikan tampilan FirebaseUI agar sesuai dengan aplikasi Anda. Selain itu, karena FirebaseUI adalah open source, Anda dapat membagi project dan menyesuaikannya dengan kebutuhan.
  • Smart Lock untuk Sandi - integrasi otomatis dengan Smart Lock untuk Sandi untuk login lintas perangkat dengan cepat.
  • Sebelum Anda memulai

    1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.

    2. Dalam file build.gradle level project, pastikan Anda memasukkan repositori Maven Google di bagian buildscript dan allprojects.

    3. Tambahkan dependensi untuk FirebaseUI ke file build.gradle level aplikasi Anda. Jika Anda ingin mendukung login dengan Facebook atau Twitter, sertakan juga Facebook SDK dan Twitter SDK:

      dependencies {
          // ...
      
          implementation 'com.firebaseui:firebase-ui-auth:4.3.1'
      
          // 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:4.x'
      
          // Required only if Twitter login support is required
          // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
          implementation 'com.twitter.sdk.android:twitter-core:3.x'
      }
      

      FirebaseUI Auth SDK memiliki ketergantungan transitif pada Firebase SDK dan SDK layanan Google Play.

    4. Di Firebase console, buka bagian Authentication, lalu aktifkan metode login yang ingin Anda dukung. Beberapa metode login memerlukan informasi tambahan yang biasanya tersedia di konsol developer layanan.

    5. Jika Anda mendukung Login dengan Google dan belum menentukan sidik jari SHA-1 aplikasi, lakukanlah dari halaman Setelan di Firebase console. Baca bagian Mengautentikasi Klien Anda untuk mengetahui informasi selengkapnya mengenai cara mendapatkan sidik jari SHA-1 aplikasi Anda.

    6. Jika Anda mendukung login dengan Facebook atau Twitter, tambahkan resource 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>
        <!-- Twitter consumer key and secret -->
        <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
        <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
      </resources>
      
    7. Login

      Untuk memulai alur login FirebaseUI, buat intent login dengan metode login yang Anda pilih:

      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
      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(providers)
                      .build(),
              RC_SIGN_IN);

      Kotlin

      // 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
      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(providers)
                      .build(),
              RC_SIGN_IN)

      Ketika alur login selesai, Anda akan menerima hasilnya dalam onActivityResult:

      Java

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
      
          if (requestCode == RC_SIGN_IN) {
              IdpResponse response = IdpResponse.fromResultIntent(data);
      
              if (resultCode == 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

      override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
          super.onActivityResult(requestCode, resultCode, data)
      
          if (requestCode == RC_SIGN_IN) {
              val response = IdpResponse.fromResultIntent(data)
      
              if (resultCode == Activity.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.
                  // ...
              }
          }
      }

      Menyiapkan metode login

    8. Di Firebase console, buka bagian Authentication. Di tab Metode login, aktifkan penyedia Email/Sandi. Perlu diketahui bahwa login dengan email/sandi harus diaktifkan untuk menggunakan metode login dengan link email.

    9. Di bagian yang sama, aktifkan metode login dengan Link email (login tanpa sandi), lalu klik Simpan.

    10. Anda juga harus mengaktifkan Firebase Dynamic Links untuk menggunakan metode login dengan link email. Di Firebase console, klik Dynamic Links di bagian Grow di menu navigasi. Klik Mulai lalu tambahkan domain. Domain yang Anda pilih di sini akan tercermin dalam link email yang dikirim ke pengguna.

    11. Anda dapat mengaktifkan login dengan link email di FirebaseUI dengan memanggil enableEmailLinkSignIn pada instance EmailBuilder. Anda juga perlu memberikan objek ActionCodeSettings yang valid dengan menyetel setHandleCodeInApp ke true. Selain itu, Anda perlu memberi akses pada URL yang diteruskan ke setUrl, yang dapat dilakukan di Firebase console, di bagian Authentication -> Metode Login -> Domain yang diotorisasi.

      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();
      
      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(Arrays.asList(
                              new AuthUI.IdpConfig.EmailBuilder().enableEmailLinkSignIn()
                              .setActionCodeSettings(actionCodeSettings).build())
                      .build(),
              RC_SIGN_IN);
      
      
    12. Jika Anda ingin mendapatkan link dalam aktivitas tertentu, ikuti langkah-langkah yang diuraikan di sini. Jika tidak, link akan diarahkan ke aktivitas peluncur Anda.

    13. Setelah mendapatkan deep link, Anda perlu melakukan verifikasi bahwa kami dapat menanganinya untuk Anda. Jika kami bisa, Anda bisa meneruskannya kepada kami melalui setEmailLink.

      if (AuthUI.canHandleIntent(getIntent())) {
          if (getIntent().getExtras() == null) {
                  return;
              }
              String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
              if (link != null) {
                  startActivityForResult(
                          AuthUI.getInstance()
                                  .createSignInIntentBuilder()
                                  .setEmailLink(link)
                                  .setAvailableProviders(getAvailableProviders())
                                  .build(),
                          RC_SIGN_IN);
              }
      }
      
    14. Opsional Metode login dengan link email lintas perangkat didukung. Artinya, link yang dikirim melalui aplikasi Android dapat digunakan untuk login di web atau aplikasi iOS. Secara default, dukungan lintas perangkat diaktifkan. Anda dapat menonaktifkannya dengan memanggil setForceSameDevice pada instance EmailBuilder.

      Baca FirebaseUI-Web dan FirebaseUI-iOS untuk mengetahui informasi lebih lanjut.

    15. Logout

      FirebaseUI menyediakan cara mudah untuk logout dari Firebase Authentication dan semua penyedia identitas sosial:

      Java

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

      Kotlin

      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

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

      Penyesuaian

      Secara default FirebaseUI menggunakan AppCompat untuk penentuan tema, yang berarti FirebaseUI akan secara alami menggunakan skema warna aplikasi Anda. Jika Anda memerlukan penyesuaian lebih lanjut, Anda dapat meneruskan tema dan logo ke builder Intent login:

      Java

      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(providers)
                      .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                      .setTheme(R.style.MySuperAppTheme)      // Set theme
                      .build(),
              RC_SIGN_IN);

      Kotlin

      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(providers)
                      .setLogo(R.drawable.my_great_logo) // Set logo drawable
                      .setTheme(R.style.MySuperAppTheme) // Set theme
                      .build(),
              RC_SIGN_IN)

      Anda juga dapat menetapkan kebijakan privasi dan persyaratan layanan khusus:

      Java

      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(providers)
                      .setTosAndPrivacyPolicyUrls(
                              "https://example.com/terms.html",
                              "https://example.com/privacy.html")
                      .build(),
              RC_SIGN_IN);

      Kotlin

      startActivityForResult(
              AuthUI.getInstance()
                      .createSignInIntentBuilder()
                      .setAvailableProviders(providers)
                      .setTosAndPrivacyPolicyUrls(
                              "https://example.com/terms.html",
                              "https://example.com/privacy.html")
                      .build(),
              RC_SIGN_IN)

      Langkah Berikutnya

      • Untuk mengetahui informasi lebih lanjut mengenai penggunaan dan penyesuaian FirebaseUI, baca file README di GitHub.
      • Jika Anda menemukan masalah di FirebaseUI dan ingin melaporkannya, gunakan pelacak masalah GitHub.