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

FirebaseUI Auth کتابخانه‌ای است که بر پایه‌ی SDK احراز هویت فایربیس ساخته شده و جریان‌های رابط کاربری drop-in را برای استفاده در برنامه‌ی شما فراهم می‌کند.

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

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

  • ارائه دهندگان چندگانه - جریان‌های ورود به سیستم برای ایمیل/رمز عبور، تلفن، گوگل، فیس‌بوک، اپل، گیت‌هاب، مایکروسافت، یاهو، توییتر، احراز هویت ناشناس و OAuth سفارشی.
  • مدیریت حساب کاربری — جریان‌هایی برای انجام وظایف مدیریت حساب کاربری، مانند ایجاد حساب کاربری و تنظیم مجدد رمز عبور.
  • پیوند حساب کاربری — جریان‌هایی برای پیوند ایمن حساب‌های کاربری در سراسر ارائه‌دهندگان هویت.
  • ارتقاء کاربر ناشناس — برای ارتقاء ایمن کاربران ناشناس، جریان‌ها فعال می‌شوند.
  • تم‌های سفارشی - پشتیبانی از رابط کاربری Material 3 که می‌تواند تم برنامه شما را به ارث ببرد. همچنین، از آنجا که FirebaseUI متن‌باز است، می‌توانید پروژه را تغییر داده و دقیقاً مطابق با نیازهای خود سفارشی کنید.
  • مدیریت اعتبارنامه - ادغام خودکار با مدیریت اعتبارنامه برای ورود سریع بین دستگاه‌های مختلف.
  • احراز هویت چند عاملی - پشتیبانی از پیامک و TOTP برای امنیت بیشتر.

قبل از اینکه شروع کنی

  1. اگر هنوز Firebase را به پروژه اندروید خود اضافه نکرده‌اید، آن را اضافه کنید.
  2. در کنسول Firebase ، روش‌های ورود به سیستمی را که می‌خواهید پشتیبانی شوند، فعال کنید.
  3. FirebaseUI Auth را به ماژول برنامه خود اضافه کنید:
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 Sign-In) به طور خودکار توسط افزونه‌ی google-services Gradle ارائه می‌شود. مطمئن شوید که ورود به سیستم با گوگل (Google Sign-In) را در کنسول Firebase فعال کرده‌اید.

ورود به فیسبوک

اگر از ورود به سیستم فیس‌بوک استفاده می‌کنید، شناسه برنامه فیس‌بوک خود را به 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>

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

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

ارائه دهندگان توییتر، گیت‌هاب، مایکروسافت، یاهو و اپل نیاز به پیکربندی در کنسول فایربیس دارند اما نیازی به تنظیمات اضافی مخصوص اندروید ندارند. برای دستورالعمل‌های خاص ارائه دهنده، به مستندات فایربیس آث مراجعه کنید.

ارائه دهندگان مورد نظر خود را در داخل 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 در گیت‌هاب مراجعه کنید.

ورود

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

این به شما یک جریان احراز هویت کامل با موارد زیر می‌دهد:

  • احراز هویت رمز عبور.
  • ورود به سیستم گوگل.
  • تنظیم مجدد رمز عبور.
  • متریال ۳ استایل.
  • پشتیبانی از مدیریت اعتبارنامه.
  • مدیریت خطا از طریق فراخوانی‌های مستقیم

خروج از سیستم

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

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

سفارشی‌سازی

احراز هویت FirebaseUI قابل تنظیم است و ساده‌ترین راه برای شروع، تنظیم مستقیم یک تم در 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 مراجعه کنید.

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

اگر برنامه شما هنوز از Activities و Activity Result API استفاده می‌کند، می‌توانید با استفاده از AuthFlowController جریان راه‌اندازی مبتنی بر Activity را حفظ کنید:

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