FirebaseUI عبارة عن مكتبة مبنية على Firebase Authentication SDK والتي توفر تدفقات واجهة المستخدم لاستخدامها في تطبيقك. يوفر FirebaseUI المزايا التالية:
- مزودون متعددون - تدفقات تسجيل الدخول للبريد الإلكتروني / كلمة المرور ، ورابط البريد الإلكتروني ، ومصادقة الهاتف ، وتسجيل الدخول إلى Google ، وتسجيل الدخول إلى Facebook ، وتسجيل الدخول إلى Twitter ، وتسجيل الدخول إلى GitHub.
- إدارة الحساب - تدفقات للتعامل مع مهام إدارة الحساب ، مثل إنشاء الحساب وإعادة تعيين كلمة المرور.
- ربط الحساب - يتدفق لربط حسابات المستخدمين بأمان عبر موفري الهوية.
- ترقية مستخدم مجهول - تتدفق لترقية المستخدمين المجهولين بأمان.
- سمات مخصصة - خصص مظهر FirebaseUI ليلائم تطبيقك. أيضًا ، نظرًا لأن FirebaseUI مفتوح المصدر ، يمكنك تقسيم المشروع وتخصيصه وفقًا لاحتياجاتك تمامًا.
- Smart Lock لكلمات المرور - تكامل تلقائي مع Smart Lock لكلمات المرور لتسجيل الدخول بسرعة عبر الأجهزة.
قبل ان تبدأ
أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل.
أضف تبعيات FirebaseUI إلى ملف
build.gradle
على مستوى التطبيق. إذا كنت تريد دعم تسجيل الدخول باستخدام Facebook أو Twitter ، فقم أيضًا بتضمين Facebook و Twitter SDK:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:7.2.0' // 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' }
تحتوي حزمة FirebaseUI Auth SDK على تبعيات متعدية على Firebase SDK و SDK لخدمات Google Play.
في وحدة تحكم Firebase ، افتح قسم المصادقة وقم بتمكين طرق تسجيل الدخول التي تريد دعمها. تتطلب بعض طرق تسجيل الدخول معلومات إضافية ، وعادة ما تكون متاحة في وحدة تحكم مطوري الخدمة.
إذا قمت بتمكين تسجيل الدخول بحساب Google:
عند المطالبة في وحدة التحكم ، قم بتنزيل ملف تهيئة Firebase المحدث (
google-services.json
) ، والذي يحتوي الآن على معلومات عميل OAuth المطلوبة لتسجيل الدخول إلى Google.انقل ملف التكوين المحدث هذا إلى مشروع Android Studio الخاص بك ، واستبدل ملف التكوين المقابل الذي عفا عليه الزمن. (راجع إضافة Firebase إلى مشروع Android الخاص بك .)
إذا لم تكن قد حددت بصمة SHA لتطبيقك ، فقم بذلك من صفحة الإعدادات في وحدة تحكم Firebase. راجع مصادقة عميلك للحصول على تفاصيل حول كيفية الحصول على بصمة SHA لتطبيقك.
إذا كنت تدعم تسجيل الدخول باستخدام Facebook أو Twitter ، فأضف موارد السلسلة إلى
strings.xml
التي تحدد معلومات التعريف المطلوبة من قبل كل موفر:<resources> <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). --> <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string> <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string> </resources>
تسجيل الدخول
أنشئ ActivityResultLauncher
الذي يسجل رد الاتصال لعقد نتيجة نشاط FirebaseUI:
Kotlin+KTX
// See: https://developer.android.com/training/basics/intents/result private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract(), ) { res -> this.onSignInResult(res) }
Java
// See: https://developer.android.com/training/basics/intents/result private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new FirebaseAuthUIActivityResultContract(), new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() { @Override public void onActivityResult(FirebaseAuthUIAuthenticationResult result) { onSignInResult(result); } } );
لبدء تدفق تسجيل الدخول إلى FirebaseUI ، أنشئ نية لتسجيل الدخول باستخدام طرق تسجيل الدخول المفضلة لديك:
Kotlin+KTX
// Choose authentication providers val providers = arrayListOf( AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.PhoneBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build(), AuthUI.IdpConfig.FacebookBuilder().build(), AuthUI.IdpConfig.TwitterBuilder().build(), ) // Create and launch sign-in intent val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
// Choose authentication providers List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder().build(), new AuthUI.IdpConfig.PhoneBuilder().build(), new AuthUI.IdpConfig.GoogleBuilder().build(), new AuthUI.IdpConfig.FacebookBuilder().build(), new AuthUI.IdpConfig.TwitterBuilder().build()); // Create and launch sign-in intent Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
عند اكتمال تدفق تسجيل الدخول ، ستتلقى النتيجة في onSignInResult
:
Kotlin+KTX
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) { val response = result.idpResponse if (result.resultCode == RESULT_OK) { // Successfully signed in val user = FirebaseAuth.getInstance().currentUser // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
Java
private void onSignInResult(FirebaseAuthUIAuthenticationResult result) { IdpResponse response = result.getIdpResponse(); if (result.getResultCode() == RESULT_OK) { // Successfully signed in FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // ... } else { // Sign in failed. If response is null the user canceled the // sign-in flow using the back button. Otherwise check // response.getError().getErrorCode() and handle the error. // ... } }
قم بإعداد طرق تسجيل الدخول
مصادقة ارتباط البريد الإلكتروني
في وحدة تحكم Firebase ، افتح قسم المصادقة . في علامة التبويب طريقة تسجيل الدخول ، قم بتمكين موفر البريد الإلكتروني / كلمة المرور . لاحظ أنه يجب تمكين تسجيل الدخول إلى البريد الإلكتروني / كلمة المرور لاستخدام تسجيل الدخول إلى رابط البريد الإلكتروني.
في نفس القسم ، قم بتمكين طريقة تسجيل الدخول لرابط البريد الإلكتروني (تسجيل الدخول بدون كلمة مرور) وانقر فوق حفظ .
سيتعين عليك أيضًا تمكين الارتباطات الديناميكية لـ Firebase لاستخدام تسجيل الدخول إلى رابط البريد الإلكتروني. في وحدة تحكم Firebase ، انقر فوق " الروابط الديناميكية" ضمن "الانخراط" في شريط التنقل. انقر فوق "البدء" وإضافة مجال. سينعكس المجال الذي تختاره هنا في روابط البريد الإلكتروني المرسلة إلى المستخدمين لديك.
يمكنك تمكين تسجيل الدخول إلى رابط البريد الإلكتروني في FirebaseUI عن طريق استدعاء
enableEmailLinkSignIn
في مثيلEmailBuilder
. ستحتاج أيضًا إلى توفير كائنActionCodeSettings
صالح مع تعيينsetHandleCodeInApp
على "صحيح". بالإضافة إلى ذلك ، تحتاج إلى إدراج عنوان URL الذي تمرره إلىsetUrl
في القائمة البيضاء ، وهو ما يمكن إجراؤه في وحدة تحكم Firebase ، ضمن المصادقة -> طرق تسجيل الدخول -> المجالات المصرح بها.Kotlin+KTX
val actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( // yourPackageName= "...", // installIfNotAvailable= true, // minimumVersion= null, ) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build() val providers = listOf( EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build(), ) val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() .setAndroidPackageName( /* yourPackageName= */ "...", /* installIfNotAvailable= */ true, /* minimumVersion= */ null) .setHandleCodeInApp(true) // This must be set to true .setUrl("https://google.com") // This URL needs to be whitelisted .build(); List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ); Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
إذا كنت ترغب في التقاط الرابط في نشاط معين ، يرجى اتباع الخطوات الموضحة هنا . خلاف ذلك ، سيتم إعادة توجيه الرابط إلى نشاط المشغل الخاص بك.
بمجرد التقاط الرابط لموضع معين ، ستحتاج إلى الاتصال للتحقق من أنه يمكننا التعامل معه نيابة عنك. إذا استطعنا ، فأنت بحاجة إلى تمريره إلينا عبر
setEmailLink
.Kotlin+KTX
if (AuthUI.canHandleIntent(intent)) { val extras = intent.extras ?: return val link = extras.getString("email_link_sign_in") if (link != null) { val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent) } }
Java
if (AuthUI.canHandleIntent(getIntent())) { if (getIntent().getExtras() == null) { return; } String link = getIntent().getExtras().getString("email_link_sign_in"); if (link != null) { Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent); } }
يتم دعم تسجيل الدخول الاختياري عبر رابط البريد الإلكتروني عبر الأجهزة ، مما يعني أنه يمكن استخدام الرابط المرسل عبر تطبيق Android لتسجيل الدخول على الويب أو تطبيقات Apple. بشكل افتراضي ، يتم تمكين الدعم عبر الأجهزة. يمكنك تعطيله عن طريق استدعاء
setForceSameDevice
على مثيلEmailBuilder
.راجع FirebaseUI-Web و FirebaseUI-iOS لمزيد من المعلومات.
خروج
يوفر FirebaseUI طرقًا ملائمة لتسجيل الخروج من مصادقة Firebase وكذلك جميع موفري الهوية الاجتماعية:
Kotlin+KTX
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
يمكنك أيضًا حذف حساب المستخدم تمامًا:
Kotlin+KTX
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
التخصيص
بشكل افتراضي ، يستخدم FirebaseUI AppCompat للتخصيص ، مما يعني أنه سيعتمد بشكل طبيعي نظام ألوان تطبيقك. إذا كنت بحاجة إلى مزيد من التخصيص ، فيمكنك تمرير سمة وشعار إلى أداة إنشاء Intent
لتسجيل الدخول:
Kotlin+KTX
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build(); signInLauncher.launch(signInIntent);
يمكنك أيضًا تعيين سياسة خصوصية وشروط خدمة مخصصة:
Kotlin+KTX
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html", ) .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build(); signInLauncher.launch(signInIntent);
الخطوات التالية
- لمزيد من المعلومات حول استخدام FirebaseUI وتخصيصه ، راجع ملف README على GitHub.
- إذا وجدت مشكلة في FirebaseUI وترغب في الإبلاغ عنها ، فاستخدم أداة تعقب المشكلات على GitHub .