با FirebaseUI، به‌راحتی به برنامه Android خود ورود به سیستم اضافه کنید

‫FirebaseUI Auth کتابخانه‌ای است که در بالای «کیت توسعه نرم‌افزار اصالت‌سنجی Firebase» ساخته شده است و جریان‌های واسط کاربر آماده‌ای برای استفاده در برنامه‌تان ارائه می‌دهد.

جریان ورود به سیستم توصیه‌شده از صفحه‌های «نوشتن» استفاده می‌کند. برای برنامه‌هایی که هنوز از «فعالیت‌ها» استفاده می‌کنند، به بخش برنامه‌های موجود مبتنی بر فعالیت مراجعه کنید.

‫FirebaseUI Auth مزایای زیر را ارائه می‌دهد:

  • ارائه‌دهندگان متعدد — جریان‌های ورود به سیستم برای ایمیل/گذرواژه، تلفن، Google،‏ Facebook،‏ Apple،‏ GitHub،‏ Microsoft،‏ Yahoo،‏ Twitter،‏ احراز هویت ناشناس، و OAuth سفارشی.
  • مدیریت حساب — جریان‌هایی برای مدیریت وظایف مدیریت حساب، مانند ایجاد حساب و بازنشانی گذرواژه.
  • پیوند دادن حساب — جریان‌هایی برای پیوند دادن ایمن حساب‌های کاربر در ارائه‌دهندگان هویت.
  • کاربر ناشناس درحال ارتقا — جریان‌هایی برای ارتقای ایمن کاربران ناشناس.
  • زمینه‌های سفارشی — پشتیبانی از واسط کاربر Material 3 که می‌تواند زمینه برنامه شما را به ارث ببرد. همچنین، ازآنجایی‌که FirebaseUI متن‌باز است، می‌توانید پروژه را انشعاب دهید و آن را دقیقاً مطابق با نیازهایتان سفارشی‌سازی کنید.
  • Credential Manager — ادغام خودکار با Credential Manager برای ورود سریع به سیستم در دستگاه‌های مختلف.
  • اصالت‌سنجی چندعاملی — پشتیبانی از پیامک و «گذرواژه یک‌بار مصرف زمان‌مبنا» برای امنیت بیشتر.

قبل از شروع

  1. اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه Android خود اضافه کنید.
  2. در کنسول Firebase، روش‌های ورود به سیستمی را که می‌خواهید پشتیبانی کنید فعال کنید.
  3. «احراز هویت FirebaseUI» را به واحد برنامه خود اضافه کنید:
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")
}

راه‌اندازی روش‌های ورود به سیستم

‫ورود با Google

پیکربندی «ورود به سیستم با Google» به‌طور خودکار توسط فایل پیکربندی google-services.json ارائه می‌شود. مطمئن شوید که «ورود به سیستم با Google» را در کنسول Firebase فعال کرده‌اید.

ورود به سیستم فیس‌بوک

اگر از «ورود به سیستم Facebook» استفاده می‌کنید، «شناسه برنامه Facebook» خود را به strings.xml اضافه کنید:

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

برای دستورالعمل‌های راه‌اندازی، به اسناد فیس‌بوک برای توسعه‌دهندگان مراجعه کنید.

ارائه‌دهندگان دیگر

ارائه‌دهندگان Twitter،‏ GitHub،‏ Microsoft،‏ Yahoo، و Apple نیاز به پیکربندی در «کنسول Firebase» دارند اما نیازی به راه‌اندازی اضافی مختص Android ندارند. برای دستورالعمل‌های خاص ارائه‌دهنده، مستندات «احراز هویت Firebase» را ببینید.

ارائه‌دهندگان موردنظرتان را در authUIConfiguration انتخاب کنید:

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

ورود به سیستم با پیوند ایمیل در پیکربندی ارائه‌دهنده ایمیل قرار دارد:

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

برای جریان کامل مدیریت پیوند عمیق، بخش «ورود به سیستم با پیوند ایمیل» در فایل README در GitHub را ببینید.

ورود به سیستم

AuthUIConfiguration بساز، سپس FirebaseAuthScreen را نشان بده.

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

این کار یک جریان اصالت‌سنجی کامل با این موارد دراختیارتان قرار می‌دهد:

  • اصالت‌سنجی با گذرواژه.
  • ورود به سیستم Google.
  • گذرواژه بازنشانی شد.
  • سبک‌پردازی Material 3.
  • پشتیبانی از «مدیر اعتبارنامه‌ها».
  • خطا در مدیریت ازطریق تماس‌های برگشتی مستقیم.

خروج از سیستم

‫FirebaseUI Auth روش‌های راحتی برای خروج از سیستم و حذف حساب ارائه می‌دهد:

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

سفارشی‌سازی

FirebaseUI Auth قابل سفارشی‌سازی است و ساده‌ترین راه برای شروع کار این است که مستقیماً در authUIConfiguration زمینه‌ای تنظیم کنید:

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

همچنین می‌توانید:

  • از AuthUITheme.Default،‏ AuthUITheme.DefaultDark، یا AuthUITheme.Adaptive استفاده کنید.
  • زمینه برنامه‌تان را با AuthUITheme.fromMaterialTheme() به‌ارث ببرید.
  • زمینه پیش‌فرض را با .copy() سفارشی‌سازی کنید.
  • AuthUITheme کاملاً سفارشی بسازید.
  • نشان‌واره، نشانی وب «شرایط خدمات»، و نشانی وب «خط‌مشی رازداری» را در authUIConfiguration تنظیم کنید.

برای جزئیات کامل زمینه‌بندی و سفارشی‌سازی، ازجمله تقدم زمینه، سبک‌دهی دکمه ارائه‌دهنده، و زمینه‌های سفارشی، بخش «زمینه‌بندی و سفارشی‌سازی» فایل readme در GitHub را ببینید.

برنامه‌های مبتنی بر فعالیت موجود

اگر برنامه شما هنوز از «فعالیت‌ها» و «میانای برنامه‌سازی کاربردی نتیجه فعالیت» استفاده می‌کند، می‌توانید بااستفاده از AuthFlowController، جریان راه‌اندازی مبتنی بر «فعالیت» را حفظ کنید:

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