הוסף כניסה בקלות לאפליקציית Android שלך באמצעות FirebaseUI

FirebaseUI היא ספריה בנויה על גבי ה- SDK אימות Firebase המספק הנפתח ב UI זורם לשימוש באפליקציה. FirebaseUI מספק את היתרונות הבאים:

  • ספקים מרובים - כניסת תזרים עבור הדוא"ל / סיסמא, קישור בדוא"ל, אימות לטלפון, גוגל-כניסה, פייסבוק כניסה, טוויטר כניסה, ו GitHub כניסה.
  • חשבון ניהול - זורם להתמודד עם משימות ניהול חשבון, כגון יצירת החשבון ואיפוס סיסמה.
  • לקשר את החשבון - זורם אל משתמש בקישור בבטחה החשבונות בין ספקי זהות.
  • שדרוג משתמש אנונימי - זורם לשדרג משתמשים אנונימיים בבטחה.
  • ערכות נושא מותאמות אישית - להתאים אישית את המראה של FirebaseUI להתאים את האפליקציה שלך. כמו כן, מכיוון ש- FirebaseUI הוא קוד פתוח, תוכלו למזג את הפרויקט ולהתאים אותו בדיוק לצרכים שלכם.
  • Smart Lock לסיסמאות - שילוב אוטומטי עם Smart Lock לסיסמאות עבור מהירה בין מכשירים הכניסה.

לפני שאתה מתחיל

  1. אם לא עשית זאת עדיין, להוסיף Firebase לפרויקט Android שלך .

  2. מוסיפים את התלות עבור FirebaseUI כדי ברמת היישום שלך build.gradle קובץ. אם ברצונך לתמוך בכניסה באמצעות פייסבוק או טוויטר, כלול גם את ערכות ה- 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 יש תלות מעבר ב- SDK של Firebase וב- 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 דינמי קישורים סימן הדוא"ל-link לשימוש. בשנות ה קונסולת Firebase , לחץ על קישורים דינאמיים תחת לעסוק בסרגל הניווט. לחץ על תחילת העבודה ולהוסיף תחום. הדומיין שתבחר כאן יבוא לידי ביטוי בקישורי הדוא"ל שנשלחו למשתמשים שלך.

  4. ניתן להפעיל סימן קישור הדוא"ל ב FirebaseUI ידי קריאת enableEmailLinkSignIn על EmailBuilder למשל. אתה גם צריך לספק תקף ActionCodeSettings אובייקט עם setHandleCodeInApp מוגדר כ- True. בנוסף, אתה צריך הלבנה את כתובת האתר שאתה עובר כדי 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 שלך יכול לשמש כדי להתחבר על האינטרנט שלך או אפליקציות ל- iOS. כברירת מחדל, תמיכה בין מכשירים מופעלת. אתה יכול לבטל את זה על ידי התקשרות setForceSameDevice על EmailBuilder למשל.

    ראה FirebaseUI-אינטרנט ו FirebaseUI-iOS לקבלת מידע נוסף.

התנתק

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 קובץ על GitHub.
  • אם אתה מוצא בעיה FirebaseUI וברצוני לדווח על כך, להשתמש מעקב הבעיות GitHub .