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