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

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

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

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

    1. ב-Xcode, כשהפרויקט של האפליקציה פתוח, עוברים אל File > Add Packages (קובץ > הוספת חבילות).
    2. כשמוצגת בקשה, מוסיפים את מאגר ה-SDK של Firebase לפלטפורמות של אפל:
    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, נכנסים אל אבטחה > אימות.
    2. בכרטיסייה שיטת כניסה לחשבון, מפעילים את ספק הכניסה Anonymous.
    3. אופציונלי: אם שדרגתם את הפרויקט ל-Firebase Authentication with Identity Platform, אתם יכולים להפעיל ניקוי אוטומטי. כשמפעילים את ההגדרה הזו, חשבונות אנונימיים שנוצרו לפני יותר מ-30 ימים נמחקים באופן אוטומטי. בפרויקטים שבהם מופעל ניקוי אוטומטי, אימות אנונימי לא ייכלל יותר במגבלות השימוש או במכסות החיוב. מידע נוסף זמין בקטע ניקוי אוטומטי.

אימות אנונימי באמצעות Firebase

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

  1. מייבאים את המודול FirebaseCore בקובץ UIApplicationDelegate, וגם כל מודול Firebase אחר שבו משתמש ה-app delegate. לדוגמה, כדי להשתמש ב-Cloud Firestore וב-Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. מגדירים מופע משותף של FirebaseApp ב-method‏ application(_:didFinishLaunchingWithOptions:) של נציג האפליקציה:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. אם אתם משתמשים ב-SwiftUI, אתם צריכים ליצור נציג של האפליקציה ולצרף אותו ל-struct של App באמצעות UIApplicationDelegateAdaptor או NSApplicationDelegateAdaptor. צריך גם להשבית את ה-swizzling של ה-app delegate. מידע נוסף זמין בהוראות של 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::

    Swift

    Auth.auth().signInAnonymously { authResult, error in
      // ...
    }

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
  5. אם השיטה signInAnonymouslyWithCompletion: מסתיימת בלי שגיאה, אפשר לקבל את הנתונים בחשבון של המשתמש הלא רשום מהאובייקט FIRAuthDataResult:

    Swift

    guard let user = authResult?.user else { return }
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid

    Objective-C

    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;

איך ממירים חשבון אנונימי לחשבון קבוע

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

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

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

    Swift
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    Objective-C
        [[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.