تمكين المصادقة عبر التطبيقات باستخدام Apple Keychain المشتركة

لمشاركة حالات المصادقة عبر تطبيقات أو ملحقات متعددة على أنظمة Apple الأساسية، قم بتخزين حالة المصادقة في سلسلة مفاتيح مشتركة باستخدام خدمات سلسلة المفاتيح وقم بتكوين تطبيقاتك لاستخدام سلسلة المفاتيح المشتركة.

وهذا يسمح للمستخدمين بما يلي:

  • قم بتسجيل الدخول مرة واحدة وقم بتسجيل الدخول عبر جميع التطبيقات التي تنتمي إلى نفس مجموعة الوصول.
  • قم بتسجيل الخروج مرة واحدة وتسجيل الخروج عبر جميع التطبيقات التي تنتمي إلى نفس مجموعة الوصول.

مشاركة حالة المصادقة بين التطبيقات

لمشاركة حالة المصادقة بين التطبيقات:

  1. قم بإعداد مجموعة وصول لتطبيقاتك.

    يمكنك استخدام إما مجموعة الوصول إلى سلسلة المفاتيح أو مجموعة التطبيقات. راجع مشاركة الوصول إلى عناصر Keychain بين مجموعة من التطبيقات للحصول على التفاصيل.

    لإعداد مجموعة وصول إلى سلسلة المفاتيح، قم بما يلي لكل تطبيق:

    1. في Xcode، انتقل إلى إعدادات المشروع > القدرات .
    2. تمكين مشاركة سلسلة المفاتيح.
    3. أضف معرف مجموعة سلسلة المفاتيح. استخدم نفس المعرف لجميع التطبيقات التي تريد مشاركة حالتها.
  2. في كل تطبيق، قم بتعيين مجموعة الوصول إلى مجموعة الوصول إلى سلسلة المفاتيح أو مجموعة التطبيقات التي قمت بإنشائها في الخطوة السابقة.

    سويفت

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

    ج موضوعية

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. في تطبيق واحد على الأقل، قم بتسجيل دخول المستخدم باستخدام أي طريقة لتسجيل الدخول.

    سويفت

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

    ج موضوعية

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

    نفس المستخدم الحالي متاح في جميع التطبيقات في مجموعة الوصول.

    سويفت

    var user = Auth.auth().currentUser
    

    ج موضوعية

    FIRUser *user = FIRAuth.auth.currentUser;
    

قم بالتبديل مرة أخرى إلى سلسلة المفاتيح غير المشتركة

  1. قم بتعيين مجموعة الوصول على nil لإيقاف مشاركة حالة المصادقة.

    سويفت

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

    ج موضوعية

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. قم بتسجيل دخول المستخدم بأي طريقة تسجيل دخول. لن تكون حالة المستخدم متاحة لأي تطبيقات أخرى.

    سويفت

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

    ج موضوعية

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

قم بترحيل مستخدم قام بتسجيل الدخول إلى سلسلة مفاتيح مشتركة

لترحيل مستخدم قام بتسجيل الدخول بالفعل إلى حالة مشتركة:

  1. قم بالإشارة إلى المستخدم الحالي لاستخدامه في المستقبل.

    سويفت

    var user = Auth.auth().currentUser
    

    ج موضوعية

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (اختياري) تحقق من حالة المصادقة لمجموعة الوصول التي تريد مشاركتها.

    سويفت

    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
    }
    

    ج موضوعية

    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. استخدم مجموعة الوصول التي قمت بتعيينها مسبقًا في إعدادات المشروع.

    سويفت

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

    ج موضوعية

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. قم بتحديث المستخدم الحالي.

    سويفت

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

    ج موضوعية

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. يمكن الآن الوصول إلى المستخدم من خلال تطبيقات أخرى لديها حق الوصول إلى نفس مجموعة الوصول.