FirebaseUI Auth هي مكتبة تستند إلى حزمة تطوير البرامج (SDK) لمصادقة Firebase وتوفّر مسارات واجهة مستخدم جاهزة للاستخدام في تطبيقك.
يستخدم مسار تسجيل الدخول المقترَح شاشات Compose. بالنسبة إلى التطبيقات التي لا تزال تستخدم الأنشطة، يُرجى الاطّلاع على قسم التطبيقات الحالية المستندة إلى الأنشطة.
تقدّم FirebaseUI Auth المزايا التالية:
- مقدّمو خدمات متعدّدون : مسارات تسجيل الدخول للبريد الإلكتروني/كلمة المرور والهاتف وGoogle وFacebook وApple وGitHub وMicrosoft وYahoo وTwitter والمصادقة المجهولة وOAuth المخصّص
- إدارة الحساب : مسارات للتعامل مع مهام إدارة الحساب، مثل إنشاء الحساب وإعادة ضبط كلمات المرور
- ربط الحساب : مسارات لربط حسابات المستخدمين بأمان بين مقدّمي الهوية
- ترقية المستخدم المجهول : مسارات لترقية المستخدمين المجهولين بأمان
- السمات المخصّصة : دعم واجهة مستخدم Material 3 التي يمكنها استعارة سمة تطبيقك بالإضافة إلى ذلك، بما أنّ FirebaseUI هو مشروع مفتوح المصدر، يمكنك إنشاء نسخة من المشروع وتخصيصه بما يتناسب مع احتياجاتك تمامًا.
- مدير بيانات الاعتماد : عملية تكامل تلقائية مع مدير بيانات الاعتماد لتسجيل الدخول السريع على عدّة أجهزة
- المصادقة المتعدّدة العوامل : دعم الرسائل القصيرة وكلمة المرور لمرة واحدة مستندة إلى الوقت (TOTP) لمزيد من الأمان
قبل البدء
- إذا لم يسبق لك ذلك، أضِف Firebase إلى مشروع Android.
- في وحدة تحكّم Firebase، فعِّل طرق تسجيل الدخول التي تريد دعمها.
- أضِف 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
يوفّر المكوّن الإضافي google-services Gradle تلقائيًا إعدادات ميزة "تسجيل الدخول باستخدام حساب Google". تأكَّد من تفعيل ميزة "تسجيل الدخول باستخدام حساب Google" في وحدة تحكّم Firebase.
تسجيل الدخول عبر Facebook
إذا كنت تستخدم ميزة "تسجيل الدخول عبر 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>
يُرجى الاطّلاع على مستندات Facebook للمطوّرين للحصول على تعليمات الإعداد.
مقدّمو خدمات آخرون
يتطلّب مقدّمو خدمات 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
- دعم Credential Manager
- معالجة الأخطاء من خلال معاودة الاتصال المباشرة
تسجيل الخروج
توفّر 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مخصّصة بالكامل - ضبط شعار وعنوان URL لبنود الخدمة وعنوان URL لسياسة الخصوصية في
authUIConfiguration
للاطّلاع على التفاصيل الكاملة حول تطبيق السمات والتخصيص، بما في ذلك أولوية السمة وتنسيق أزرار مقدّمي الخدمات والسمات المخصّصة، يُرجى الاطّلاع على قسم "تطبيق السمات والتخصيص" في ملف readme على GitHub.
التطبيقات الحالية المستندة إلى الأنشطة
إذا كان تطبيقك لا يزال يستخدم الأنشطة وActivity Result API، يمكنك الاحتفاظ بمسار الإطلاق المستند إلى الأنشطة باستخدام 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))