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

אמת באמצעות Firebase ב- iOS באמצעות מספר טלפון

באפשרותך להשתמש באימות Firebase כדי להיכנס למשתמש על ידי שליחת הודעת SMS לטלפון המשתמש. המשתמש נכנס באמצעות קוד חד פעמי הכלול בהודעת ה- SMS.

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

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

  1. הוסף את Firebase לפרויקט ה- iOS שלך .
  2. כלול את התרמילים הבאים ב- Podfile שלך:
    pod 'Firebase/Auth'
    
  3. אם עדיין לא חיברת את האפליקציה שלך לפרויקט Firebase שלך, עשה זאת ממסוף Firebase .

חששות ביטחוניים

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

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

אפשר כניסה למספר טלפון לפרויקט Firebase שלך

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

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

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

הפעל אימות אפליקציה

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

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

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

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

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

התחל לקבל התראות שקטות

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

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

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

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

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

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

הגדר אימות reCAPTCHA

כדי לאפשר ל- SDK של Firebase להשתמש באימות reCAPTCHA:

  1. הוסף תוכניות URL מותאמות אישית לפרויקט ה- Xcode שלך:
    1. פתח את תצורת הפרויקט שלך: לחץ פעמיים על שם הפרויקט בתצוגת העץ השמאלית. בחר באפליקציה שלך מקטע TARGETS , ואז בחר בכרטיסייה מידע והרחיב את הקטע סוגי כתובות אתרים .
    2. לחץ על כפתור + והוסף ערכת כתובות אתרים עבור מזהה הלקוח ההפוך שלך. כדי למצוא ערך זה, פתח את קובץ התצורה של GoogleService-Info.plist וחפש את מפתח REVERSED_CLIENT_ID . העתק את הערך של אותו מפתח והדבק אותו בתיבה 'ערכי כתובות אתרים' בדף התצורה. השאר את שדות האחרים ריקים.

      בסיום התצורה שלך צריכה להיראות דומה למצב הבא (אך עם הערכים הספציפיים ליישום שלך):

  2. אופציונלי : אם ברצונך להתאים אישית את האופן שבו האפליקציה שלך מציגה את SFSafariViewController או UIWebView בעת הצגת ה- reCAPTCHA בפני המשתמש, צור מחלקה מותאמת אישית שתואמת את פרוטוקול FIRAuthUIDelegate , verifyPhoneNumber:UIDelegate:completion: אותה verifyPhoneNumber:UIDelegate:completion:

שלח קוד אימות לטלפון המשתמש

כדי להיכנס לכניסה למספר טלפון, verifyPhoneNumber:UIDelegate:completion: למשתמש ממשק שמבקש ממנו לספק את מספר הטלפון שלו ואז התקשרו verifyPhoneNumber:UIDelegate:completion: טלפון מספר verifyPhoneNumber:UIDelegate:completion: כדי לבקש מ- Firebase לשלוח קוד אימות לטלפון המשתמש באמצעות SMS:

  1. קבל את מספר הטלפון של המשתמש.

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

  2. התקשרו verifyPhoneNumber:UIDelegate:completion: טלפון verifyPhoneNumber:UIDelegate:completion: מעביר אליו את מספר הטלפון של המשתמש.

    מָהִיר

    PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in
      if let error = error {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }

    מטרה-ג

    [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput
                                            UIDelegate:nil
                                            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
      if (error) {
        [self showMessagePrompt:error.localizedDescription];
        return;
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }];

    כשאתה מתקשר ל- verifyPhoneNumber:UIDelegate:completion: Firebase שולח הודעת דחיפה שקטה לאפליקציה שלך, או מוציא אתגר reCAPTCHA למשתמש. לאחר שהאפליקציה שלך מקבל את ההודעה או שהמשתמש משלים את אתגר reCAPTCHA, Firebase שולח הודעת SMS המכילה קוד אימות למספר הטלפון שצוין ומעביר מזהה אימות לפונקציית ההשלמה שלך. תצטרך גם את קוד האימות וגם את מזהה האימות כדי להיכנס למשתמש.

    ניתן למקם את הודעת ה- SMS שנשלחה על ידי Firebase על ידי ציון שפת האימות באמצעות המאפיין languageCode במופע Auth שלך.

    מָהִיר

     // Change language code to french.
     Auth.auth().languageCode = "fr";
    

    מטרה-ג

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. שמור את מזהה האימות ושחזר אותו כאשר האפליקציה שלך נטענת. על ידי כך, אתה יכול להבטיח שעדיין יהיה לך מזהה אימות חוקי אם האפליקציה שלך הופסקה לפני שהמשתמש ישלים את זרימת הכניסה (למשל, בעת מעבר לאפליקציית SMS).

    אתה יכול לשמור על מזהה האימות בכל דרך שתרצה. דרך פשוטה היא לשמור את מזהה האימות באמצעות האובייקט NSUserDefaults :

    מָהִיר

    UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
    

    מטרה-ג

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:verificationID forKey:@"authVerificationID"];
    

    לאחר מכן תוכל לשחזר את הערך השמור:

    מָהִיר

    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
    

    מטרה-ג

    NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
    

אם השיחה verifyPhoneNumber:UIDelegate:completion: טלפון verifyPhoneNumber:UIDelegate:completion: מצליחה, אתה יכול להנחות את המשתמש להקליד את קוד האימות כאשר הוא מקבל אותו בהודעת ה- SMS.

היכנס למשתמש באמצעות קוד האימות

לאחר שהמשתמש מספק לאפליקציה שלך את קוד האימות מהודעת ה- SMS, היכנס למשתמש על ידי יצירת אובייקט FIRPhoneAuthCredential מקוד האימות ומזהה האימות signInWithCredential:completion: אותו לאובייקט signInWithCredential:completion:

  1. קבל את קוד האימות מהמשתמש.
  2. צור אובייקט FIRPhoneAuthCredential מקוד האימות ומזהה האימות.

    מָהִיר

    let credential = PhoneAuthProvider.provider().credential(
        withVerificationID: verificationID,
        verificationCode: verificationCode)

    מטרה-ג

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. היכנס למשתמש באמצעות האובייקט FIRPhoneAuthCredential :

    מָהִיר

    Auth.auth().signIn(with: credential) { (authResult, error) in
      if let error = error {
        let authError = error as NSError
        if (isMFAEnabled && authError.code == AuthErrorCode.secondFactorRequired.rawValue) {
          // The user is a multi-factor user. Second factor challenge is required.
          let resolver = authError.userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
          var displayNameString = ""
          for tmpFactorInfo in (resolver.hints) {
            displayNameString += tmpFactorInfo.displayName ?? ""
            displayNameString += " "
          }
          self.showTextInputPrompt(withMessage: "Select factor to sign in\n\(displayNameString)", completionBlock: { userPressedOK, displayName in
            var selectedHint: PhoneMultiFactorInfo?
            for tmpFactorInfo in resolver.hints {
              if (displayName == tmpFactorInfo.displayName) {
                selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
              }
            }
            PhoneAuthProvider.provider().verifyPhoneNumber(with: selectedHint!, uiDelegate: nil, multiFactorSession: resolver.session) { verificationID, error in
              if error != nil {
                print("Multi factor start sign in failed. Error: \(error.debugDescription)")
              } else {
                self.showTextInputPrompt(withMessage: "Verification code for \(selectedHint?.displayName ?? "")", completionBlock: { userPressedOK, verificationCode in
                  let credential: PhoneAuthCredential? = PhoneAuthProvider.provider().credential(withVerificationID: verificationID!, verificationCode: verificationCode!)
                  let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator.assertion(with: credential!)
                  resolver.resolveSignIn(with: assertion!) { authResult, error in
                    if error != nil {
                      print("Multi factor finanlize sign in failed. Error: \(error.debugDescription)")
                    } else {
                      self.navigationController?.popViewController(animated: true)
                    }
                  }
                })
              }
            }
          })
        } else {
          self.showMessagePrompt(error.localizedDescription)
          return
        }
        // ...
        return
      }
      // User is signed in
      // ...
    }

    מטרה-ג

    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult,
                                           NSError * _Nullable error) {
        if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
          FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
          NSMutableString *displayNameString = [NSMutableString string];
          for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
            [displayNameString appendString:tmpFactorInfo.displayName];
            [displayNameString appendString:@" "];
          }
          [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                               completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
           FIRPhoneMultiFactorInfo* selectedHint;
           for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
             if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
               selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
             }
           }
           [FIRPhoneAuthProvider.provider
            verifyPhoneNumberWithMultiFactorInfo:selectedHint
            UIDelegate:nil
            multiFactorSession:resolver.session
            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
              if (error) {
                [self showMessagePrompt:error.localizedDescription];
              } else {
                [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                     completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
                 FIRPhoneAuthCredential *credential =
                     [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                                  verificationCode:verificationCode];
                 FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
                 [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
                   if (error) {
                     [self showMessagePrompt:error.localizedDescription];
                   } else {
                     NSLog(@"Multi factor finanlize sign in succeeded.");
                   }
                 }];
               }];
              }
            }];
         }];
        }
      else if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];

בדקו עם מספרי טלפון בדיוניים

ניתן להגדיר מספרי טלפון בדיוניים לפיתוח באמצעות קונסולת Firebase. בדיקה עם מספרי טלפון בדיוניים מספקת את היתרונות הבאים:

  • בדוק אימות מספר טלפון מבלי לצרוך את מכסת השימוש שלך.
  • בדוק אימות מספר טלפון מבלי לשלוח הודעת SMS בפועל.
  • ערכו בדיקות רצופות עם אותו מספר טלפון מבלי להיסגר. זה ממזער את הסיכון לדחייה בתהליך הבדיקה של App Store אם במקרה הסוקר משתמש באותו מספר טלפון לבדיקה.
  • בדוק בקלות בסביבות פיתוח ללא כל מאמץ נוסף, כגון היכולת להתפתח בסימולטור iOS או באמולטור אנדרואיד ללא שירותי Google Play.
  • כתוב בדיקות אינטגרציה מבלי להיחסם על ידי בדיקות אבטחה המופעלות בדרך כלל על מספרי טלפון אמיתיים בסביבת ייצור.

מספרי טלפון בדיוניים חייבים לעמוד בדרישות הבאות:

  1. הקפד להשתמש במספרי טלפון שהם אכן בדיוניים, ואינם קיימים כבר. אימות Firebase אינו מאפשר לך להגדיר מספרי טלפון קיימים המשמשים משתמשים אמיתיים כמספרי בדיקה. אפשרות אחת היא להשתמש ב 555 קידומות כמספרי טלפון לבדיקה בארה"ב, למשל: +1 650-555-3434
  2. מספרי טלפון חייבים להיות מעוצבים כראוי לאורכים ולמגבלות אחרות. הם עדיין יעברו את אותו אימות כמו מספר הטלפון של המשתמש האמיתי.
  3. אתה יכול להוסיף עד 10 מספרי טלפון לצורך פיתוח.
  4. השתמש במספרי טלפון / קודי בדיקה שקשה לנחש ושנה אותם לעתים קרובות.

צור מספרי טלפון בדיוני וקודי אימות

  1. במסוף Firebase , פתח את קטע האימות .
  2. בכרטיסיה שיטת כניסה , הפעל את ספק הטלפון אם עדיין לא עשית זאת.
  3. פתח את מספרי הטלפון לבדיקת תפריט האקורדיון.
  4. ספק את מספר הטלפון שתרצה לבדוק, לדוגמא: +1 650-555-3434 .
  5. ספק את קוד האימות בן 6 הספרות עבור אותו מספר ספציפי, למשל: 654321 .
  6. הוסף את המספר. אם יש צורך, אתה יכול למחוק את מספר הטלפון ואת הקוד שלו על ידי ריחוף מעל השורה המתאימה ולחץ על סמל האשפה.

בדיקה ידנית

אתה יכול להתחיל להשתמש ישירות במספר טלפון בדיוני ביישום שלך. זה מאפשר לך לבצע בדיקות ידניות בשלבי הפיתוח מבלי להיתקל בבעיות מכסות או לצמצם. אתה יכול גם לבדוק ישירות מסימולטור iOS או אמולטור אנדרואיד ללא שירותי Google Play המותקנים.

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

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

אפשרות נוספת היא להגדיר תפקיד בדיקה באמצעות תביעות מותאמות אישית למשתמשים אלה כדי להבדיל אותם כמשתמשים מזויפים אם ברצונך להגביל את הגישה נוספת.

בדיקת אינטגרציה

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

ב- iOS, ההגדרה appVerificationDisabledForTesting צריכה להיות מוגדרת כ- TRUE לפני שתתקשר ל- verifyPhoneNumber . זה מעובד מבלי לדרוש אסימון APN או לשלוח הודעות דחיפה שקטות ברקע, מה שמקל על הבדיקה בסימולטור. זה גם משבית את זרימת ה- Fallback של reCAPTCHA.

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

מָהִיר

let phoneNumber = "+16505554567"

// This test verification code is specified for the given test phone number in the developer console.
let testVerificationCode = "123456"

Auth.auth().settings.isAppVerificationDisabledForTesting = TRUE
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) {
                                                            verificationID, error in
    if (error) {
      // Handles error
      self.handleError(error)
      return
    }
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "",
                                                               verificationCode: testVerificationCode)
    Auth.auth().signInAndRetrieveData(with: credential) { authData, error in
      if (error) {
        // Handles error
        self.handleError(error)
        return
      }
      _user = authData.user
    }];
}];

מטרה-ג

NSString *phoneNumber = @"+16505554567";

// This test verification code is specified for the given test phone number in the developer console.
NSString *testVerificationCode = @"123456";

[FIRAuth auth].settings.appVerificationDisabledForTesting = YES;
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber
                                        completion:^(NSString *_Nullable verificationID,
                                                     NSError *_Nullable error) {
    if (error) {
      // Handles error
      [self handleError:error];
      return;
    }
    FIRAuthCredential *credential =
        [FIRPhoneAuthProvider credentialWithVerificationID:verificationID
                                          verificationCode:testVerificationCode];
    [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential
                                                completion:^(FIRUser *_Nullable user,
                                                             NSError *_Nullable error) {
      if (error) {
        // Handles error
        [self handleError:error];
        return;
      }
      _user = user;
    }];
}];

נספח: שימוש בכניסה טלפונית מבלי לסחוט

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

אם אתה מעדיף לא להשתמש בסחרחורת, תוכל להשבית אותו על ידי הוספת הדגל FirebaseAppDelegateProxyEnabled לקובץ Info.plist של האפליקציה שלך והגדרתו ל- NO . שים לב שהגדרת דגל זה ל- NO מבטלת גם את התנופה של מוצרים אחרים של Firebase, כולל העברת הודעות ענן של Firebase.

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

כדי להשיג את אסימון מכשיר ה- APN, יש ליישם את application:didRegisterForRemoteNotificationsWithDeviceToken: השיטה, ובו, להעביר את אסימון המכשיר ל- FIRAuth של setAPNSToken:type: method.

מָהִיר

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  // Pass device token to auth
  Auth.auth().setAPNSToken(deviceToken, type: .prod)

  // Further handling of the device token if needed by the app
  // ...
}

מטרה-ג

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Pass device token to auth.
  [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd];
  // Further handling of the device token if needed by the app.
}

כדי לטפל בהתראות דחיפה, application:didReceiveRemoteNotification:fetchCompletionHandler: שיטה, בדוק אם FIRAuth התראות הקשורות FIRAuth Firebase על ידי קריאה ל- FIRAuth של canHandleNotification: שיטה.

מָהִיר

func application(_ application: UIApplication,
    didReceiveRemoteNotification notification: [AnyHashable : Any],
    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if Auth.auth().canHandleNotification(notification) {
    completionHandler(.noData)
    return
  }
  // This notification is not auth related, developer should handle it.
}

מטרה-ג

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)notification
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // Pass notification to auth and check if they can handle it.
  if ([[FIRAuth auth] canHandleNotification:notification]) {
    completionHandler(UIBackgroundFetchResultNoData);
    return;
  }
  // This notification is not auth related, developer should handle it.
}

כדי לטפל בכתובת האתר להפניה מחדש של התוכנית המותאמת אישית, יש ליישם את application:openURL:sourceApplication:annotation: שיטה למכשירים עם מערכת הפעלה iOS 8 ומעלה, application:openURL:options: שיטה למכשירים עם מערכת הפעלה iOS 9 ואילך, application:openURL:options: העבירו את כתובת אתר לשיטת FIRAuth של canHandleURL .

מָהִיר

// For iOS 9+
func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
func application(_ application: UIApplication,
                 open url: URL,
                 sourceApplication: String?,
                 annotation: Any) -> Bool {
  if Auth.auth().canHandle(url) {
    Return true
  }
  // URL not auth related, developer should handle it.
}

מטרה-ג

// For iOS 9+
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

אם אתה משתמש ב- SwiftUI או UISceneDelegate , כדי לטפל בכתובת האתר להפניה מחדש, יש ליישם את scene:openURLContexts: השיטה, scene:openURLContexts: להעביר את כתובת האתר לשיטת FIRAuth של canHandleURL .

מָהִיר

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for urlContext in URLContexts {
      let url = urlContext.url
      Auth.auth().canHandle(url)
  }
  // URL not auth related, developer should handle it.
}

מטרה-ג

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related, developer should handle it.
  }
}

הצעדים הבאים

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

  • באפליקציות שלך תוכל לקבל את פרטי הפרופיל הבסיסי של המשתמש מאובייקט FIRUser . ראה ניהול משתמשים .

  • במסד הנתונים שלך בזמן אמת של Firebase ובכללי האבטחה של אחסון ענן, אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש auth ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

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

כדי לצאת מהחשבון משתמש, קוראים signOut: .

מָהִיר

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}
  

מטרה-ג

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

ייתכן גם שתרצה להוסיף קוד לטיפול בשגיאות עבור כל מגוון שגיאות האימות. ראה שגיאות ידית .