Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

أضف تسجيل الدخول بسهولة إلى تطبيق Android باستخدام FirebaseUI

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

FirebaseUI عبارة عن مكتبة مبنية على Firebase Authentication SDK والتي توفر تدفقات واجهة المستخدم لاستخدامها في تطبيقك. يوفر FirebaseUI الفوائد التالية:

  • مزودون متعددون - تدفقات تسجيل الدخول للبريد الإلكتروني / كلمة المرور ، ورابط البريد الإلكتروني ، ومصادقة الهاتف ، وتسجيل الدخول إلى Google ، وتسجيل الدخول إلى Facebook ، وتسجيل الدخول إلى Twitter ، وتسجيل الدخول إلى GitHub.
  • إدارة الحساب - تدفقات للتعامل مع مهام إدارة الحساب ، مثل إنشاء الحساب وإعادة تعيين كلمة المرور.
  • ربط الحساب - يتدفق لربط حسابات المستخدمين بأمان عبر موفري الهوية.
  • ترقية مستخدم مجهول - تتدفق لترقية المستخدمين المجهولين بأمان.
  • سمات مخصصة - خصص مظهر FirebaseUI ليلائم تطبيقك. أيضًا ، نظرًا لأن FirebaseUI مفتوح المصدر ، يمكنك تقسيم المشروع وتخصيصه وفقًا لاحتياجاتك تمامًا.
  • Smart Lock لكلمات المرور - تكامل تلقائي مع Smart Lock لكلمات المرور لتسجيل الدخول بسرعة عبر الأجهزة.

قبل ان تبدأ

  1. أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل.

  2. أضف تبعيات 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.

  3. في وحدة تحكم Firebase ، افتح قسم المصادقة وقم بتمكين طرق تسجيل الدخول التي تريد دعمها. تتطلب بعض طرق تسجيل الدخول معلومات إضافية ، وعادة ما تكون متاحة في وحدة تحكم مطوري الخدمة.

  4. إذا كنت تدعم تسجيل الدخول بحساب Google ولم تحدد بعد بصمة SHA-1 لتطبيقك ، فافعل ذلك من صفحة الإعدادات في وحدة تحكم Firebase. راجع مصادقة عميلك للحصول على تفاصيل حول كيفية الحصول على بصمة SHA-1 لتطبيقك.

  5. إذا كنت تدعم تسجيل الدخول باستخدام 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:

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

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
        FirebaseAuthUIActivityResultContract()
) { res ->
    this.onSignInResult(res)
}

لبدء تدفق تسجيل الدخول إلى FirebaseUI ، أنشئ نية لتسجيل الدخول باستخدام طرق تسجيل الدخول المفضلة لديك:

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

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)

عند اكتمال تدفق تسجيل الدخول ، ستتلقى النتيجة في onSignInResult :

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.
        // ...
    }
}

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.
        // ...
    }
}

قم بإعداد طرق تسجيل الدخول

  1. في وحدة تحكم Firebase ، افتح قسم المصادقة . في علامة التبويب طريقة تسجيل الدخول ، قم بتمكين موفر البريد الإلكتروني / كلمة المرور . لاحظ أنه يجب تمكين تسجيل الدخول إلى البريد الإلكتروني / كلمة المرور لاستخدام تسجيل الدخول إلى رابط البريد الإلكتروني.

  2. في نفس القسم ، قم بتمكين طريقة تسجيل الدخول لرابط البريد الإلكتروني (تسجيل الدخول بدون كلمة مرور) وانقر فوق حفظ .

  3. سيتعين عليك أيضًا تمكين الارتباطات الديناميكية لـ Firebase لاستخدام تسجيل الدخول إلى رابط البريد الإلكتروني. في وحدة تحكم Firebase ، انقر فوق "الروابط الديناميكية" ضمن " الانخراط " في شريط التنقل. انقر فوق " البدء " وإضافة مجال. سينعكس المجال الذي تختاره هنا في روابط البريد الإلكتروني المرسلة إلى المستخدمين لديك.

  4. يمكنك تمكين تسجيل الدخول إلى رابط البريد الإلكتروني في FirebaseUI عن طريق استدعاء enableEmailLinkSignIn في مثيل EmailBuilder . ستحتاج أيضًا إلى توفير كائن ActionCodeSettings صالح مع تعيين setHandleCodeInApp على "صحيح". بالإضافة إلى ذلك ، تحتاج إلى إدراج عنوان URL الذي تمرره إلى setUrl في القائمة البيضاء ، وهو ما يمكن إجراؤه في وحدة تحكم Firebase ، ضمن المصادقة -> طرق تسجيل الدخول -> المجالات المصرح بها.

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

    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)
  5. إذا كنت ترغب في التقاط الرابط في نشاط معين ، يرجى اتباع الخطوات الموضحة هنا . خلاف ذلك ، سيتم إعادة توجيه الرابط إلى نشاط المشغل الخاص بك.

  6. بمجرد التقاط الرابط لموضع معين ، ستحتاج إلى الاتصال للتحقق من أنه يمكننا التعامل معه نيابة عنك. إذا استطعنا ، فأنت بحاجة إلى تمريره إلينا عبر setEmailLink .

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

    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)
        }
    }
  7. يتم دعم تسجيل الدخول الاختياري عبر رابط البريد الإلكتروني عبر الأجهزة ، مما يعني أنه يمكن استخدام الرابط المرسل عبر تطبيق Android لتسجيل الدخول على الويب أو تطبيقات Apple. بشكل افتراضي ، يتم تمكين الدعم عبر الأجهزة. يمكنك تعطيله عن طريق استدعاء setForceSameDevice على مثيل EmailBuilder .

    راجع FirebaseUI-Web و FirebaseUI-iOS لمزيد من المعلومات.

خروج

يوفر FirebaseUI طرقًا ملائمة لتسجيل الخروج من مصادقة Firebase وكذلك جميع موفري الهوية الاجتماعية:

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

يمكنك أيضًا حذف حساب المستخدم تمامًا:

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

التخصيص

بشكل افتراضي ، يستخدم FirebaseUI AppCompat للتخصيص ، مما يعني أنه سيعتمد بشكل طبيعي نظام ألوان تطبيقك. إذا كنت بحاجة إلى مزيد من التخصيص ، فيمكنك تمرير سمة وشعار إلى أداة إنشاء Intent لتسجيل الدخول:

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)
        .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)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .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)

الخطوات التالية

  • لمزيد من المعلومات حول استخدام FirebaseUI وتخصيصه ، راجع ملف README على GitHub.
  • إذا وجدت مشكلة في FirebaseUI وترغب في الإبلاغ عنها ، فاستخدم أداة تعقب المشكلات على GitHub .