הפעלת אימות בכל האפליקציות באמצעות 'צרור מפתחות משותף' של Apple

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

המשתמשים יכולים:

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

שיתוף סטטוס האימות בין אפליקציות

כדי לשתף את סטטוס האימות בין אפליקציות:

  1. מגדירים קבוצת גישה לאפליקציות.

    אפשר להשתמש בקבוצת גישה למחזיק מפתחות או בקבוצת אפליקציות. פרטים נוספים מופיעים במאמר בנושא שיתוף גישה לפריטים ב-Keychain בין אוסף של אפליקציות.

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

    1. ב-Xcode, עוברים אל Project settings > Capabilities (הגדרות הפרויקט > יכולות).
    2. מפעילים את שיתוף מחזיק המפתחות.
    3. מוסיפים מזהה של קבוצת מחזיקי מפתחות. צריך להשתמש באותו מזהה לכל האפליקציות שרוצים לשתף ביניהן את הסטטוס.
  2. בכל אפליקציה, מגדירים את קבוצת הגישה לקבוצת הגישה למחזיק המפתחות או לקבוצת האפליקציות שיצרתם בשלב הקודם.

    Swift

    do {
      try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1")
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objective-C

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. באפליקציה אחת לפחות, נכנסים כמשתמש באמצעות שיטת כניסה כלשהי.

    Swift

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    Objective-C

    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                               NSError *_Nullable error) {
      // User signed in
    }];
    

    אותו משתמש נוכחי זמין בכל האפליקציות בקבוצת הגישה.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    

חזרה לשרשרת מפתחות לא משותפת

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

    Swift

    do {
      try Auth.auth().useUserAccessGroup(nil)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objective-C

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. מבצעים כניסה של משתמש באמצעות כל שיטת כניסה. סטטוס המשתמש לא יהיה זמין לאפליקציות אחרות.

    Swift

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    Objective-C

    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                       NSError *_Nullable error) {
      // User signed in
    }];
    

העברת משתמש שמחובר לחשבון לשרשרת מפתחות משותפת

כדי להעביר משתמש שכבר מחובר למצב משותף:

  1. הפניה למשתמש הנוכחי לשימוש עתידי.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (אופציונלי) בודקים את מצב האימות של קבוצת הגישה שרוצים לשתף.

    Swift

    let accessGroup = "TEAMID.com.example.group1"
    var tempUser: User?
    do {
      try tempUser = Auth.auth().getStoredUser(forAccessGroup: accessGroup)
    } catch let error as NSError {
      print("Error getting stored user: %@", error)
    }
    if tempUser != nil {
      // A user exists in the access group
    } else {
      // No user exists in the access group
    }
    

    Objective-C

    NSString *accessGroup = @"TEAMID.com.example.group1";
    FIRUser *tempUser = [FIRAuth getStoredUserForAccessGroup:accessGroup
                                                       error:nil];
    if (tempUser) {
      // A user exists in the access group
      } else {
      // No user exists in the access group
    }
    
  3. שימוש בקבוצת גישה שהגדרתם בעבר בהגדרות הפרויקט.

    Swift

    do {
      try Auth.auth().useUserAccessGroup(accessGroup)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    Objective-C

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. עדכון המשתמש הנוכחי.

    Swift

    Auth.auth().updateCurrentUser(user!) { error in
      // Error handling
    }
    

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. עכשיו אפליקציות אחרות שיש להן גישה לאותה קבוצת גישה יכולות לגשת למשתמש.