הוסף כניסה בקלות לאפליקציית 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);
            }
        }
);

קוטלין+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);

קוטלין+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.
        // ...
    }
}

קוטלין+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);

    קוטלין+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) {
                // ...
            }
        });

קוטלין+KTX

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

תוכל גם למחוק לחלוטין את חשבון המשתמש:

ג'אווה

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

קוטלין+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);

קוטלין+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 .