Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

  2. מוסיפים את התלות עבור FirebaseUI כדי ברמת היישום שלך build.gradle קובץ. אם ברצונך לתמוך בכניסה באמצעות Facebook או Twitter, כלול גם את ערכות ה-SDK של Facebook וטוויטר:

    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:

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

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

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

קוטלין+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 , תחת אימות -> כניסה שיטות -> תחומים מורשה.

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

    קוטלין+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(ExtraConstants.EMAIL_LINK_SIGN_IN);
        if (link != null) {
            Intent signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build();
            signInLauncher.launch(signInIntent);
        }
    }

    קוטלין+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 שלך יכול לשמש כדי להתחבר על האינטרנט שלך או Apple Apps. כברירת מחדל, תמיכה במכשירים אחרים מופעלת. אתה יכול לבטל את זה על ידי התקשרות setForceSameDevice על EmailBuilder למשל.

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

התנתק

FirebaseUI מספק שיטות נוחות ליציאה מ-Firebase Authentication וכן לכל ספקי הזהות החברתית:

Java

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

קוטלין+KTX

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

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

Java

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 קבלן:

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

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

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