Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now

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

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

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

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

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

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

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:6.4.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:4.x'
    
        // Required only if Twitter login support is required
        // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
        implementation 'com.twitter.sdk.android:twitter-core:3.x'
    }
    

    ל- FirebaseUI Auth SDK יש תלות מעבר ב- SDK של Firebase וב- SDK של שירותי Google Play.

  3. במסוף Firebase , פתח את קטע האימות והפעל את שיטות הכניסה שאתה רוצה לתמוך בה. חלק משיטות הכניסה דורשות מידע נוסף, בדרך כלל זמין במסוף המפתחים של השירות.

  4. אם אתה תומך בכניסה של Google וטרם ציינת את טביעת האצבע של SHA-1 של האפליקציה שלך, עשה זאת מדף ההגדרות של מסוף Firebase. ראה אימות הלקוח שלך לקבלת פרטים כיצד להשיג את טביעת האצבע של האפליקציה שלך.

  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>
      <!-- Twitter consumer key and secret -->
      <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
      <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
    </resources>
    

להתחבר

כדי להתחיל את זרימת הכניסה של 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
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);

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
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

לאחר השלמת זרימת הכניסה, תקבל את התוצאה ב- onActivityResult :

ג'אווה

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == 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

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.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 להשתמש בכניסה לקישור דוא"ל. במסוף Firebase לחץ על קישורים דינמיים תחת Engage בסרגל הניווט. לחץ על תחילת העבודה והוסף דומיין. הדומיין שתבחר כאן יבוא לידי ביטוי בקישורי הדוא"ל שנשלחו למשתמשים שלך.

  4. באפשרותך לאפשר כניסה לקישור דוא"ל ב- FirebaseUI על ידי קריאה enableEmailLinkSignIn EmailBuilder במופע של 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();
    
    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(Arrays.asList(
                            new AuthUI.IdpConfig.EmailBuilder().enableEmailLinkSignIn()
                            .setActionCodeSettings(actionCodeSettings).build())
                    .build(),
            RC_SIGN_IN);
    
    
  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) {
                startActivityForResult(
                        AuthUI.getInstance()
                                .createSignInIntentBuilder()
                                .setEmailLink(link)
                                .setAvailableProviders(getAvailableProviders())
                                .build(),
                        RC_SIGN_IN);
            }
    }
    
  7. כניסה לקישור דוא"ל חוצה מכשיר אופציונלי נתמכת, מה שאומר שהקישור שנשלח דרך אפליקציית Android שלך יכול לשמש כדי להתחבר לאינטרנט או לאפליקציות iOS שלך. כברירת מחדל, תמיכה בין מכשירים מופעלת. אתה יכול להשבית אותו על ידי התקשרות setForceSameDevice EmailBuilder במופע EmailBuilder .

    ראה FirebaseUI-Web ו- 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 בכניסה:

ג'אווה

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo) // Set logo drawable
                .setTheme(R.style.MySuperAppTheme) // Set theme
                .build(),
        RC_SIGN_IN)

תוכל גם להגדיר מדיניות פרטיות ותנאי שירות מותאמים אישית:

ג'אווה

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN)

הצעדים הבאים

  • למידע נוסף על שימוש והתאמה אישית של FirebaseUI, עיין בקובץ README ב- GitHub.
  • אם אתה מוצא בעיה ב- FirebaseUI וברצונך לדווח עליה, השתמש במעקב אחר בעיות GitHub .