FirebaseUI ile Android uygulamanıza kolayca oturum açma ekleyin

FirebaseUI Auth, Firebase Authentication SDK'sının üzerine kurulmuş bir kitaplıktır ve uygulamanızda kullanılmak üzere hazır kullanıcı arayüzü akışları sağlar.

Önerilen oturum açma akışında Oluşturma ekranları kullanılır. Hâlâ Etkinlikler'i kullanan uygulamalar için Mevcut etkinlik tabanlı uygulamalar bölümüne bakın.

FirebaseUI Auth aşağıdaki avantajları sunar:

  • Birden fazla sağlayıcı: E-posta/şifre, telefon, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, anonim kimlik doğrulama ve özel OAuth için oturum açma akışları.
  • Hesap Yönetimi: Hesap oluşturma ve şifre sıfırlama gibi hesap yönetimi görevlerini ele alan akışlar.
  • Hesap bağlama: Kimlik sağlayıcılar arasında kullanıcı hesaplarını güvenli bir şekilde bağlama akışları.
  • Anonim Kullanıcı Yükseltme: Anonim kullanıcıları güvenli bir şekilde yükseltme işlemleri.
  • Özel Temalar: Uygulama temanızı devralabilen Material 3 kullanıcı arayüzü desteği. Ayrıca FirebaseUI açık kaynaklı olduğundan projeyi çatallayabilir ve tam olarak ihtiyaçlarınıza göre özelleştirebilirsiniz.
  • Kimlik Bilgisi Yöneticisi: Cihazlar arası hızlı oturum açma için Kimlik Bilgisi Yöneticisi ile otomatik entegrasyon.
  • Çok öğeli kimlik doğrulaması: Ek güvenlik için SMS ve TOTP desteği.

Başlamadan önce

  1. Henüz yapmadıysanız Firebase'i Android projenize ekleyin.
  2. Firebase konsolunda desteklemek istediğiniz oturum açma yöntemlerini etkinleştirin.
  3. FirebaseUI Auth'u uygulama modülünüze ekleyin:
dependencies {
    // Check Maven Central for the latest version:
    // https://central.sonatype.com/artifact/com.firebaseui/firebase-ui-auth/versions
    implementation("com.firebaseui:firebase-ui-auth:10.0.0-beta02")

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

Oturum açma yöntemlerini ayarlama

Google ile Oturum Açma

Google ile oturum açma yapılandırması, google-services Gradle eklentisi tarafından otomatik olarak sağlanır. Firebase Konsolu'nda Google ile Oturum Açma'yı etkinleştirdiğinizden emin olun.

Facebook ile Giriş

Facebook Login kullanıyorsanız Facebook App ID'nizi strings.xml alanına ekleyin:

<resources>
    <string name="facebook_application_id" translatable="false">YOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_client_token" translatable="false">CHANGE-ME</string>
</resources>

Kurulum talimatları için Facebook for Developers belgelerine bakın.

Diğer Sağlayıcılar

Twitter, GitHub, Microsoft, Yahoo ve Apple sağlayıcıları için Firebase Konsolu'nda yapılandırma gerekir ancak Android'e özel ek kurulum gerekmez. Sağlayıcıya özel talimatlar için Firebase Auth belgelerine bakın.

authUIConfiguration içinde istediğiniz sağlayıcıları seçin:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Phone(
                defaultCountryCode = "US",
            )
        )
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
        provider(AuthProvider.Facebook())
    }
}

E-posta bağlantısı oturum açma özelliği, e-posta sağlayıcı yapılandırmasında yer alır:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(
            AuthProvider.Email(
                isEmailLinkSignInEnabled = true,
                emailLinkActionCodeSettings = actionCodeSettings {
                    url = "https://example.com/auth"
                    handleCodeInApp = true
                    setAndroidPackageName(
                        "com.example.app",
                        true,
                        null,
                    )
                },
            )
        )
    }
}

Derin bağlantı işleme akışının tamamı için GitHub'daki README dosyasının E-posta Bağlantısı ile Oturum Açma bölümüne bakın.

Oturum aç

AuthUIConfiguration oluşturun, ardından FirebaseAuthScreen gösterin.

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val authUI = FirebaseAuthUI.getInstance()

        setContent {
            MyAppTheme {
                val configuration = authUIConfiguration {
                    context = applicationContext
                    theme = AuthUITheme.fromMaterialTheme()
                    providers {
                        provider(AuthProvider.Email())
                        provider(
                            AuthProvider.Google(
                                scopes = listOf("email"),
                                serverClientId = null,
                            )
                        )
                    }
                }

                if (authUI.isSignedIn()) {
                    HomeScreen()
                } else {
                    FirebaseAuthScreen(
                        configuration = configuration,
                        authUI = authUI,
                        onSignInSuccess = { result ->
                            // User signed in successfully
                        },
                        onSignInFailure = { exception ->
                            // Sign in failed
                        },
                        onSignInCancelled = {
                            finish()
                        },
                    )
                }
            }
        }
    }
}

Bu, aşağıdakileri içeren eksiksiz bir kimlik doğrulama akışı sağlar:

  • Şifreyle kimlik doğrulama.
  • Google ile oturum açma
  • Şifre sıfırlama.
  • Material 3 stili.
  • Kimlik Bilgisi Yöneticisi desteği.
  • Doğrudan geri çağırmalar aracılığıyla hata işleme.

Oturumu kapat

FirebaseUI Auth, oturumu kapatma ve hesap silme için kolaylık sağlayan yöntemler sunar:

lifecycleScope.launch {
    FirebaseAuthUI.getInstance().signOut(applicationContext)
}
lifecycleScope.launch {
    FirebaseAuthUI.getInstance().delete(applicationContext)
}

Özelleştirme

FirebaseUI Auth özelleştirilebilir. Başlamanın en basit yolu, doğrudan authUIConfiguration içinde bir tema ayarlamaktır:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(AuthProvider.Google(scopes = listOf("email"), serverClientId = null))
    }
    theme = AuthUITheme.Adaptive
}

Ayrıca şunları da yapabilirsiniz:

  • AuthUITheme.Default, AuthUITheme.DefaultDark veya AuthUITheme.Adaptive özelliğini kullanın.
  • AuthUITheme.fromMaterialTheme() ile uygulama temanızı devralın.
  • Varsayılan temayı .copy() ile özelleştirin.
  • Tamamen özel bir AuthUITheme oluşturun.
  • authUIConfiguration içinde logo, Hizmet Şartları URL'si ve Gizlilik Politikası URL'si ayarlayın.

Tema önceliği, sağlayıcı düğmesi stili ve özel temalar dahil olmak üzere tema oluşturma ve özelleştirme ile ilgili tüm ayrıntılar için GitHub'daki readme dosyasının Tema Oluşturma ve Özelleştirme bölümüne bakın.

Mevcut etkinliğe dayalı uygulamalar

Uygulamanız hâlâ Etkinlikler ve Etkinlik Sonucu API'sini kullanıyorsa AuthFlowController kullanarak Etkinlik tabanlı bir başlatma akışını koruyabilirsiniz:

private val authLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult(),
) { result ->
    if (result.resultCode == RESULT_OK) {
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // User cancelled or sign-in failed
    }
}

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
    }
}

val controller = FirebaseAuthUI.getInstance().createAuthFlow(configuration)
authLauncher.launch(controller.createIntent(this))