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
דף זה תורגם על ידי Cloud Translation API.
Switch to English

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

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

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

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

  1. הוסף את Firebase לפרויקט ה- iOS שלך .

  2. הוסף את FirebaseUI לפודפיל שלך:

    pod 'FirebaseUI'
    

    אם אתה מעדיף, תוכל להוסיף רק את רכיב Auth ואת הספקים שבהם ברצונך להשתמש:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. אם עדיין לא חיברת את האפליקציה שלך לפרוייקט Firebase שלך, עשה זאת ממסוף Firebase .

הגדר שיטות כניסה

לפני שתוכל להשתמש ב- Firebase כדי להיכנס למשתמשים, עליך להפעיל ולהגדיר את שיטות הכניסה שאתה רוצה לתמוך בה.

כתובת דוא"ל וסיסמה

במסוף Firebase , פתח את קטע האימות והפעל אימות דוא"ל וסיסמה.

  1. במסוף Firebase , פתח את קטע האימות . בכרטיסיה שיטת כניסה , הפעל את ספק הדוא"ל / סיסמה . שים לב כי יש לאפשר כניסה באמצעות דוא"ל / סיסמה כדי להשתמש בכניסה לקישור דוא"ל.

  2. באותו סעיף, הפעל שיטת כניסה לקישור דוא"ל (כניסה ללא סיסמה) ולחץ על שמור .

  3. ניתן להפעיל סימן קישור הדוא"ל על ידי אתחול FUIEmailAuth למשל עם FIREmailLinkAuthSignInMethod . יהיה עליך גם לספק אובייקט FIRActionCodeSettings תקף עם handleCodeInApp מוגדר כ- true.

מָהִיר

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

מטרה-ג

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. בנוסף, עליך להוסיף לרשימת היתרים את כתובת האתר שאתה מעביר למייזר הפנימי. אתה יכול לעשות זאת במסוף Firebase , פתח את קטע האימות . בכרטיסיה שיטת כניסה , הוסף את כתובת האתר תחת תחומים מורשים .

  2. לאחר שתתפוס את הקישור העמוק, יהיה עליך להעביר אותו לממשק המשתמש האמיתי כדי שניתן יהיה לטפל בו.

מָהִיר

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

מטרה-ג

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. כניסה לקישור דוא"ל ב- FirebaseUI-iOS תואמת ל- FirebaseUI-Android ו- FirebaseUI-web כאשר משתמש אחד שמתחיל את הזרימה מ- FirebaseUI-Android יכול לפתוח את הקישור ולהשלים כניסה עם FirebaseUI-web. הדבר נכון גם לגבי הזרימה ההפוכה.

תפוח עץ

  1. עקוב אחר הסעיפים לפני שתתחיל ועמוד בדרישות נתונים אנונימיות של Apple במדריך Firebase היכנס באמצעות Apple .

  2. הוסף את היכולת כניסה עם Apple לקובץ הזכויות שלך.

  3. אתחל מופע של ספק OAuth שהוגדר עבור כניסה באמצעות Apple:

    מָהִיר

    provider = FUIOAuth.appleAuthProvider()
    

    מטרה-ג

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

גוגל

  1. במסוף Firebase , פתח את קטע האימות והפעל כניסה של Google.

  2. הוסף את מזהה הלקוח ההפוך שלך כסכמת כתובות אתרים בפרויקט ה- Xcode שלך. אתה יכול למצוא ערך זה GoogleService-Info.plist .

פייסבוק

  1. הגדר את ה- SDK לכניסה לפייסבוק על ידי ביצוע עמוד התחלת העבודה של פייסבוק .

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

  3. אפשר שיתוף של מחזיקי מפתחות בפרויקט ה- Xcode שלך ​​ממסך הגדרות הפרויקט> יכולות .

  4. הוסף fb FACEBOOK_APP_ID כקובץ URL בפרויקט ה- Xcode שלך.

  5. הוסף את מזהה האפליקציה שלך ב- Facebook ושם התצוגה לקובץ Info.plist :

    מַפְתֵחַ ערך
    FacebookAppID FACEBOOK_APP_ID (לדוגמה, 1234567890 )
    FacebookDisplayName שם האפליקציה שלך

טוויטר

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

  2. אתחל מופע של ספק OAuth שהוגדר לכניסה לטוויטר:

    מָהִיר

    provider = FUIOAuth.twitterAuthProvider()
    

    מטרה-ג

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

מספר טלפון

  1. במסוף Firebase , פתח את קטע האימות והפעל כניסה למספר טלפון.

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

    להפעלת התראות APN לשימוש עם אימות Firebase:

    1. ב- Xcode, הפעל הודעות דחיפה לפרויקט שלך.

    2. העלה את מפתח האימות של ה- APN שלך ל- Firebase. אם עדיין אין לך מפתח אימות של APNs, ראה קביעת תצורה של APNs עם FCM .

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

      2. במפתח האימות של APN תחת תצורת אפליקציית iOS , לחץ על כפתור העלה .

      3. דפדף למיקום בו שמרת את המפתח שלך, בחר אותו ולחץ על פתח . הוסף את מזהה המפתח עבור המפתח (זמין בתעודות, מזהים ופרופילים במרכז החברים של אפל למפתחים ) ולחץ על העלה .

      אם כבר יש לך תעודת APN, תוכל להעלות את האישור במקום זאת.

  3. כאשר לא ניתן לקבל התראות APN במכשיר, Firebase משתמש ב- reCAPTCHA כדי לאמת בקשות.

    כדי לאפשר אימות reCAPTCHA, אם עדיין לא הוספת את מזהה הלקוח ההפוך שלך כקבוצת כתובות אתרים (למשל, כדי להפעיל כניסה של Google), עשה זאת בפרויקט ה- Xcode שלך. אתה יכול למצוא ערך זה GoogleService-Info.plist .

  4. אופציונלי : Firebase משתמש בשיטת swizzling כדי להשיג באופן אוטומטי את אסימון ה- APN של האפליקציה שלך, לטיפול בהתראות הדחיפה השקטות ש- Firebase שולח לאפליקציה שלך, וכדי ליירט אוטומטית את הפניית התוכניות המותאמות אישית מדף האימות reCAPTCHA במהלך האימות.

    אם אתה מעדיף לא להשתמש בסחרחורת, ראה נספח: שימוש בכניסה לטלפון מבלי לסחוט במסמכי אימות SDK של Firebase.

להתחבר

כדי להתחיל את זרימת הכניסה של FirebaseUI, ראשית אתחל את FirebaseUI:

מָהִיר

import FirebaseUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

מטרה-ג

@import FirebaseUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

לאחר מכן, הגדר את התצורה של FirebaseUI כך שתשתמש בשיטות הכניסה שאתה רוצה לתמוך בה:

מָהִיר

import FirebaseUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

מטרה-ג

@import FirebaseUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

אם הפעלת כניסה של Google או פייסבוק, יישם מטפל לתוצאת זרמי ההרשמה של Google ופייסבוק:

מָהִיר

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

מטרה-ג

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

לבסוף, קבל מופע של AuthViewController מ- FUIAuth . לאחר מכן תוכל להציג אותו כבקר התצוגה הראשונה של האפליקציה שלך או להציג אותו מבקר תצוגה אחר באפליקציה שלך.

מָהִיר

כדי לקבל את הכניסה בוררת שיטות:

let authViewController = authUI.authViewController()

אם אתה משתמש רק בכניסה למספר טלפון, תוכל להציג את תצוגת הכניסה למספר הטלפון ישירות במקום:

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

מטרה-ג

כדי לקבל את הכניסה בוררת שיטות:

UINavigationController *authViewController = [authUI authViewController];

אם אתה משתמש רק בכניסה למספר טלפון, תוכל להציג את תצוגת הכניסה למספר הטלפון ישירות במקום:

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

לאחר הצגת תצוגת האימות והמשתמש נכנס, התוצאה מוחזרת לנציג didSignInWithUser:error: של FirebaseUI ב- didSignInWithUser:error: method:

מָהִיר

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

מטרה-ג

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

התנתק

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

מָהִיר

authUI.signOut()

מטרה-ג

[authUI signOut];

התאמה אישית

באפשרותך להתאים אישית את מסכי הכניסה על ידי סיווג משנה של בקרי התצוגה של FirebaseUI ולציין אותם בשיטות הנציגות של FUIAuth :

מָהִיר

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

מטרה-ג

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

באפשרותך להתאים אישית את כתובת האתר לתנאי השירות של האפליקציה שלך, המקושרים במסך יצירת החשבון:

מָהִיר

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

מטרה-ג

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

לבסוף, תוכל להתאים אישית את ההודעות וההנחיות המוצגות למשתמשים שלך על ידי ציון חבילה מותאמת אישית:

מָהִיר

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

מטרה-ג

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

הצעדים הבאים

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