FirebaseUI Auth هي مكتبة تستند إلى حزمة تطوير البرامج (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 for Developers للحصول على تعليمات الإعداد.
مقدّمو الخدمات الآخرون
تتطلّب خدمات 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))