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

FirebaseUI هي مكتبة بنيت على أعلى Firebase مصادقة SDK الذي يوفر انخفاض في تدفقات UI لاستخدامها في التطبيق الخاص بك. يوفر FirebaseUI المزايا التالية:

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

قبل ان تبدأ

  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. إذا كنت دعم جوجل الدخول في ولم يحدد بعد التطبيق الخاص بك بصمة SHA-1، بذلك من صفحة إعدادات وحدة التحكم Firebase. انظر تصديق عميلك للحصول على تفاصيل حول كيفية الحصول على التطبيق الخاص بك بصمة SHA-1.

  5. إذا كنت دعم تسجيل الدخول مع الفيسبوك أو تويتر، إضافة موارد السلسلة ل 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 آخر عقد النتيجة:

جافا

// 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 ، أنشئ نية لتسجيل الدخول باستخدام طرق تسجيل الدخول المفضلة لديك:

جافا

// 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 :

جافا

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. في نفس القسم، تمكن رابط البريد الإلكتروني (passwordless تسجيل الدخول) تسجيل الدخول الأسلوب وانقر فوق حفظ.

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

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

    جافا

    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 .

    جافا

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
            return;
        }
        String link = getIntent().getExtras().getString(ExtraConstants.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(ExtraConstants.EMAIL_LINK_SIGN_IN)
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build()
            signInLauncher.launch(signInIntent)
        }
    }
  7. اختياري الصليب علامة صلة البريد الإلكتروني جهاز معتمد في، وهو ما يعني أن هذا العنوان إرسالها عبر تطبيق Android يمكن استخدامها لتسجيل الدخول على شبكة الإنترنت أو دائرة الرقابة الداخلية تطبيقات الخاصة بك. بشكل افتراضي ، يتم تمكين الدعم عبر الأجهزة. يمكنك تعطيله من خلال الدعوة setForceSameDevice على EmailBuilder المثال.

    انظر FirebaseUI ويب و FirebaseUI-دائرة الرقابة الداخلية لمزيد من المعلومات.

خروج

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

جافا

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

Kotlin + KTX

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

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

جافا

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 باني:

جافا

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)

يمكنك أيضًا تعيين سياسة خصوصية وشروط خدمة مخصصة:

جافا

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 الملف على جيثب.
  • إذا وجدت مشكلة في FirebaseUI وترغب في الإبلاغ عن ذلك، استخدم قضية تعقب جيثب .