Google 致力于为黑人社区推动种族平等。查看具体举措

FirebaseUI ile Android uygulamanıza kolayca oturum açma özelliğini ekleyin

FirebaseUI açılan UI uygulamanızda kullanmak için akar sağlar Firebase Kimlik SDK üzerine inşa kütüphanesidir. FirebaseUI aşağıdaki avantajları sağlar:

  • Çoklu Sağlayıcıları - oturum açma e-posta / şifre, e-posta bağlantısı, telefon, kimlik doğrulama için akışları, Google Sign-in, Facebook Giriş, Heyecan Giriş ve GitHub Girişi.
  • Hesap Yönetimi - Böyle bir hesap oluşturma ve şifre sıfırlar gibi hesap yönetimi görevlerini işlemek için akar.
  • Hesabı Bağlama - güvenle bağlantı kullanıcı kimlik sağlayıcıları arasında hesapları akar.
  • Anonim Kullanıcı Yükseltme - güvenle anonim kullanıcılar yükseltmek için akar.
  • Özel Temalar - uygulamanızı maç için FirebaseUI görünümünü özelleştirmek. Ayrıca, FirebaseUI açık kaynak olduğu için projeyi çatallayabilir ve tam olarak ihtiyaçlarınıza göre özelleştirebilirsiniz.
  • Şifreler için Smart Lock - otomatik entegrasyon Şifreler için Smart Lock hızlı çapraz cihaz oturum açma için.

Sen başlamadan önce

  1. Eğer henüz yapmadıysanız, Android projeye Firebase ekleyin .

  2. Uygulamaya seviyesi FirebaseUI için bağımlılıkları ekleyin build.gradle dosyası. Facebook veya Twitter ile oturum açmayı desteklemek istiyorsanız, Facebook ve Twitter SDK'larını da ekleyin:

    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, Firebase SDK ve Google Play hizmetleri SDK üzerinde geçişli bağımlılıklara sahiptir.

  3. In Firebase konsoluna , Kimlik Doğrulama bölümünü açmak ve oturum açma desteklemek istediğiniz yöntemlerle sağlar. Bazı oturum açma yöntemleri, genellikle hizmetin geliştirici konsolunda bulunan ek bilgiler gerektirir.

  4. Eğer Oturum Google desteklemek ve henüz uygulamanızın SHA-1 parmak izini belirtilmemişse varsa, gelen bunu Ayarlar sayfasının Firebase konsolunun. Bkz Sizin Müşteri kimlik denetimi uygulamanızın SHA-1 parmak izini almak için ilgili ayrıntılar için.

  5. Eğer oturum açma Facebook ya da Twitter ile, dize kaynaklar eklemek desteklerse strings.xml her sağlayıcı tarafından gerekli kimlik bilgilerini belirtin:

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

Kayıt olmak

Bir oluşturma ActivityResultLauncher FirebaseUI Etkinlik sonuç sözleşme için bir geri arama kaydeder:

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

FirebaseUI oturum açma akışını başlatmak için tercih ettiğiniz oturum açma yöntemleriyle bir oturum açma amacı oluşturun:

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)

Oturum açma akışı tamamlandığında, sen sonucu alacaksınız 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.
        // ...
    }
}

Oturum açma yöntemlerini ayarlayın

  1. In Firebase konsoluna , Kimlik Doğrulama bölümünü açın. Yöntem sekmesinde İşaret Üzerine, E-posta / Şifre sağlayıcı sağlar. E-posta bağlantısı oturum açmayı kullanmak için e-posta/şifre oturum açmanın etkinleştirilmesi gerektiğini unutmayın.

  2. Aynı bölümde, yöntemde oturum açma E-posta bağlantısını (şifresiz oturum açma) etkinleştirmek ve Kaydet'i tıklayın.

  3. Ayrıca. Kullanım eposta bağlantı işareti Firebase Dinamik Linkler etkinleştirmek zorunda yılında olacak Firebase konsolunda gezinme çubuğunda Engage altındaki Dinamik bağlantılar tıklayın. Başlangıç tıklayın ve bir etki alanı eklemek. Burada seçtiğiniz alan adı, kullanıcılarınıza gönderilen e-posta bağlantılarına yansıtılacaktır.

  4. Sen arayarak FirebaseUI in e-posta bağlantısı işareti etkinleştirebilirsiniz enableEmailLinkSignIn bir de EmailBuilder örneği. Ayrıca geçerli bir vermeniz gerekecektir ActionCodeSettings nesneyi setHandleCodeInApp true seti. Ayrıca, gerek beyaz listesi size aktarmak URL setUrl yapılabilir, Firebase konsolunun Kimlik Doğrulaması altında, -> İşaret Yöntemleri -> Yetkili alanları.

    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. Belirli bir etkinlikte bağlantıyı yakalamak istiyorsanız, lütfen aşağıda belirtilen adımları burada . Aksi takdirde, bağlantı başlatıcı etkinliğinize yönlendirilecektir.

  6. Derin bağlantıyı yakaladığınızda, sizin için halledebileceğimizi doğrulamak için aramanız gerekir. Biz ise, o zaman aracılığıyla bize geçmesi gerekiyor setEmailLink .

    Java

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
            return;
        }
        String link = getIntent().getExtras().getString(ExtraConstants.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(ExtraConstants.EMAIL_LINK_SIGN_IN)
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build()
            signInLauncher.launch(signInIntent)
        }
    }
  7. Bağlantı Android uygulaması üzerinden gönderilen demekse Opsiyonel Cihazlar arası e-posta bağlantısı işareti desteklenir, web veya iOS uygulamaları giriş yapmayı kullanılabilir. Varsayılan olarak, çapraz cihaz desteği etkindir. Sen arayarak devre dışı bırakabilirsiniz setForceSameDevice üzerinde EmailBuilder örneği.

    Bkz FirebaseUI-Web ve FirebaseUI-iOS fazla bilgi için.

Oturumu Kapat

FirebaseUI, tüm sosyal kimlik sağlayıcılarının yanı sıra Firebase Authentication'dan çıkış yapmak için kolaylık yöntemleri sağlar:

Java

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

Kotlin+KTX

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

Ayrıca kullanıcının hesabını tamamen silebilirsiniz:

Java

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

Kotlin+KTX

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

özelleştirme

Varsayılan olarak FirebaseUI, tema için AppCompat'ı kullanır; bu, uygulamanızın renk düzenini doğal olarak benimseyeceği anlamına gelir. Eğer daha fazla özelleştirmeye gerek duyarsanız bir tema ve bir logo geçebilir oturum açma Intent oluşturucu:

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)

Ayrıca özel bir gizlilik politikası ve hizmet şartları da belirleyebilirsiniz:

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)

Sonraki adımlar

  • Kullanarak ve FirebaseUI özelleştirme hakkında daha fazla bilgi için bkz README GitHub'dan dosyayı.
  • Eğer FirebaseUI bir sorunu bulup bildirmek istiyorsanız, kullanmak GitHub sorunu izci .