FirebaseUI היא ספרייה הבנויה על גבי ה-SDK של Firebase Authentication המספקת זרימות ממשק משתמש נפתחות לשימוש באפליקציה שלך. FirebaseUI מספק את היתרונות הבאים:
- ספקים מרובים - זרימות כניסה לאימייל/סיסמה, קישור לדוא"ל, אימות טלפון, כניסה לגוגל, התחברות לפייסבוק, התחברות לטוויטר והתחברות GitHub.
- ניהול חשבון - זורם לטיפול במשימות ניהול חשבון, כגון יצירת חשבון ואיפוס סיסמא.
- קישור חשבון - זורם לקישור בטוח של חשבונות משתמש בין ספקי זהות.
- שדרוג משתמש אנונימי - זורם לשדרוג בטוח של משתמשים אנונימיים.
- ערכות נושא מותאמות אישית - התאם אישית את המראה של FirebaseUI כך שיתאים לאפליקציה שלך. כמו כן, מכיוון ש-FirebaseUI הוא קוד פתוח, אתה יכול לחלק את הפרויקט ולהתאים אותו בדיוק לצרכים שלך.
- Smart Lock for Passwords - אינטגרציה אוטומטית עם Smart Lock for Passwords לכניסה מהירה בין מכשירים.
לפני שאתה מתחיל
אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך .
הוסף את התלות עבור 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.
במסוף Firebase , פתח את הקטע אימות והפעל את שיטות הכניסה שבהן ברצונך לתמוך. חלק משיטות הכניסה דורשות מידע נוסף, זמין בדרך כלל במסוף המפתחים של השירות.
אם אתה תומך בכניסה ל-Google ועדיין לא ציינת את טביעת האצבע SHA-1 של האפליקציה שלך, עשה זאת מדף ההגדרות של מסוף Firebase. ראה אימות הלקוח שלך לפרטים כיצד לקבל את טביעת האצבע SHA-1 של האפליקציה שלך.
אם אתה תומך בכניסה עם 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. // ... } }
הגדר שיטות כניסה
אימות קישור אימייל
במסוף Firebase , פתח את הקטע אימות . בכרטיסייה שיטת כניסה , הפעל את ספק הדוא"ל/סיסמה . שים לב שכניסה לדוא"ל/סיסמה חייבת להיות מופעלת כדי להשתמש בכניסה לקישור דוא"ל.
באותו קטע, הפעל את שיטת הכניסה של קישור דוא"ל (כניסה ללא סיסמה) ולחץ על שמור .
תצטרך גם להפעיל את Firebase Dynamic Links כדי להשתמש בכניסה באמצעות דואר אלקטרוני. במסוף Firebase , לחץ על Dynamic Links תחת Engage בסרגל הניווט. לחץ על תחילת העבודה והוסף דומיין. הדומיין שתבחר כאן יבוא לידי ביטוי בקישורי האימייל שנשלחו למשתמשים שלך.
אתה יכול להפעיל כניסה לקישור דוא"ל ב-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)
אם אתה רוצה לתפוס את הקישור בפעילות ספציפית, אנא עקוב אחר השלבים המפורטים כאן . אחרת, הקישור יפנה לפעילות המשגר שלך.
לאחר שתתפסו את הקישור העמוק, תצטרכו להתקשר ולוודא שנוכל לטפל בו עבורכם. אם אנחנו יכולים, אז אתה צריך להעביר את זה אלינו באמצעות
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) } }
כניסה אופציונלית לקישור דוא"ל חוצה מכשיר נתמכת, מה שאומר שניתן להשתמש בקישור שנשלח דרך אפליקציית 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 .