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

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

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

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

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

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

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

  1. מייבאים את המודול FirebaseCore ב-UIApplicationDelegate, וגם את כל מודולי Firebase אחרים שמשמשים את נציג האפליקציה. לדוגמה, כדי להשתמש ב-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 בשיטה 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, אתם צריכים ליצור נציג אפליקציה ולצרף אותו למבנה 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::

    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];
    התחברות באמצעות חשבון Facebook
    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 לשיטה 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.