אימות באמצעות Firebase באופן אנונימי בפלטפורמות של Apple

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

לפני שמתחילים

  1. שימוש ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.

    1. ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל קובץ > הוספת חבילות.
    2. כשמופיעה בקשה, מוסיפים את המאגר של Firebase SDK לפלטפורמות של Apple:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. בוחרים את הספרייה Firebase Authentication.
    5. מוסיפים את הדגל -ObjC לקטע Other Linker Flags (דגלים אחרים של קישור) בהגדרות ה-build של היעד.
    6. בסיום, Xcode יתחיל לפתור את יחסי התלות ולהוריד אותם באופן אוטומטי ברקע.
  2. אם עדיין לא קישרתם את האפליקציה לפרויקט Firebase, תוכלו לעשות זאת דרך מסוף Firebase.
  3. מפעילים את האימות האנונימי:
    1. במסוף Firebase, פותחים את הקטע Auth.
    2. בדף Sign-in Methods מפעילים את שיטת הכניסה Anonymous.
    3. אופציונלי: אם שדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, תוכלו להפעיל ניקוי אוטומטי. כשמפעילים את ההגדרה הזו, חשבונות אנונימיים שנוצרו לפני יותר מ-30 יום נמחקים באופן אוטומטי. בפרויקטים שבהם הפעלתם את הניקוי האוטומטי, אימות אנונימי לא ייספר יותר במסגרת מגבלות השימוש או המכסות לחיוב. ניקוי אוטומטי

אימות אנונימי ב-Firebase

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

  1. מייבאים את המודול FirebaseCore ב-UIApplicationDelegate, וגם את כל המודולים האחרים של Firebase שבהם משתמש הנציג של האפליקציה. לדוגמה, כדי להשתמש ב-Cloud Firestore וב-Authentication:
    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          
    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. מגדירים מופע משותף של FirebaseApp בשיטה application(_:didFinishLaunchingWithOptions:) של הנציג של האפליקציה:
    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. אם אתם משתמשים ב-SwiftUI, עליכם ליצור נציג אפליקציה ולצרף אותו למבנה App דרך UIApplicationDelegateAdaptor או NSApplicationDelegateAdaptor. צריך גם להשבית את החלפת הקוד של נציג האפליקציה. מידע נוסף זמין בהוראות ל-SwiftUI.
    SwiftUI
    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. קוראים לשיטה signInAnonymouslyWithCompletion::
    Auth.auth().signInAnonymously { authResult, error in
      // ...
    }
    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
  5. אם השיטה signInAnonymouslyWithCompletion: מסתיימת ללא שגיאה, אפשר לקבל את נתוני החשבון של המשתמש האנונימי מהאובייקט FIRAuthDataResult:
    guard let user = authResult?.user else { return }
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid
    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;

המרת חשבון אנונימי לחשבון קבוע

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

  1. כשהמשתמש נרשם, צריך להשלים את תהליך הכניסה של ספק האימות של המשתמש, עד לקריאה לאחת מהשיטות של FIRAuth.signInWith, אבל לא כולל אותה. לדוגמה, אפשר לקבל את אסימון מזהה Google, אסימון הגישה ל-Facebook או את כתובת האימייל והסיסמה של המשתמש.
  2. מקבלים FIRAuthCredential עבור ספק האימות החדש:

    כניסה באמצעות חשבון Google
    guard
      let authentication = user?.authentication,
      let idToken = authentication.idToken
    else {
      return
    }
    
    let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                   accessToken: authentication.accessToken)
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                     accessToken:result.user.accessToken.tokenString];
    התחברות באמצעות חשבון Facebook
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    כניסה באמצעות כתובת אימייל וסיסמה
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. מעבירים את האובייקט FIRAuthCredential לשיטה linkWithCredential:completion: של משתמש הכניסה:

        user.link(with: credential) { authResult, error in
      // ...
    }
    }
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];

אם הקריאה ל-linkWithCredential:completion: תצליח, לחשבון החדש של המשתמש תהיה גישה לנתוני Firebase של החשבון האנונימי.

ניקוי אוטומטי

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

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

אם אתם רוצים לראות כמה משתמשים יושפעו מהתכונה הזו לפני שאתם מפעילים אותה, ואתם כבר שדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, תוכלו לסנן לפי is_anon ב-Cloud Logging.

השלבים הבאים

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

Firebase Authentication lets you add an end-to-end identity solution to your app for easy user authentication, sign-in, and onboarding in just a few lines of code.

עדכון אחרון: Mar 7, 2025