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

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

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

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

  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. אם אתה תומך בכניסה ל-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 Activity:

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 Dynamic Links כדי להשתמש בכניסה באמצעות דואר אלקטרוני. במסוף Firebase , לחץ על Dynamic Links תחת Engage בסרגל הניווט. לחץ על תחילת העבודה והוסף דומיין. הדומיין שתבחר כאן יבוא לידי ביטוי בקישורי האימייל שנשלחו למשתמשים שלך.

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

    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 Authentication וכן לכל ספקי הזהות החברתית:

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 .