Bật tính năng xác thực trên nhiều ứng dụng bằng Apple Keychain dùng chung

Để chia sẻ trạng thái xác thực trên nhiều ứng dụng hoặc tiện ích trên các nền tảng của Apple, hãy lưu trữ trạng thái xác thực trong một chuỗi khoá dùng chung bằng Keychain Services (Dịch vụ chuỗi khoá) và định cấu hình các ứng dụng của bạn để sử dụng chuỗi khoá dùng chung.

Điều này cho phép người dùng:

  • Đăng nhập một lần và được đăng nhập trên tất cả các ứng dụng thuộc cùng một nhóm truy cập.
  • Đăng xuất một lần và được đăng xuất trên tất cả các ứng dụng thuộc cùng một nhóm truy cập.

Chia sẻ trạng thái xác thực giữa các ứng dụng

Cách chia sẻ trạng thái xác thực giữa các ứng dụng:

  1. Thiết lập nhóm truy cập cho các ứng dụng của bạn.

    Bạn có thể sử dụng nhóm truy cập chuỗi khoá hoặc nhóm ứng dụng. Hãy xem bài viết Chia sẻ quyền truy cập vào các mục trong chuỗi khoá giữa một nhóm ứng dụng để biết thông tin chi tiết.

    Để thiết lập một nhóm truy cập vào chuỗi khoá, hãy làm như đây cho từng ứng dụng:

    1. Trong Xcode, hãy chuyển đến Cài đặt dự án > Khả năng.
    2. Bật tính năng Chia sẻ chuỗi khoá.
    3. Thêm giá trị nhận dạng nhóm chuỗi khoá. Sử dụng cùng một giá trị nhận dạng cho tất cả các ứng dụng mà bạn muốn chia sẻ trạng thái.
  2. Trong mỗi ứng dụng, hãy đặt nhóm truy cập thành nhóm truy cập chuỗi khoá hoặc nhóm ứng dụng mà bạn đã tạo ở bước trước.

    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. Trong ít nhất một ứng dụng, hãy đăng nhập người dùng bằng bất kỳ phương thức đăng nhập nào.

    Swift

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

    Objective-C

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

    Cùng một người dùng hiện tại có trong tất cả ứng dụng thuộc nhóm truy cập.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    

Chuyển về chuỗi khoá không dùng chung

  1. Đặt nhóm truy cập thành nil để ngừng chia sẻ trạng thái uỷ quyền.

    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. Đăng nhập người dùng bằng bất kỳ phương thức đăng nhập nào. Không có ứng dụng nào khác có thể truy cập vào trạng thái người dùng.

    Swift

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

    Objective-C

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

Di chuyển người dùng đã đăng nhập sang chuỗi khoá dùng chung

Cách di chuyển người dùng đã đăng nhập sang trạng thái dùng chung:

  1. Tham chiếu đến người dùng hiện tại để sử dụng trong tương lai.

    Swift

    var user = Auth.auth().currentUser
    

    Objective-C

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (Không bắt buộc) Kiểm tra trạng thái uỷ quyền của nhóm quản lý quyền truy cập mà bạn muốn chia sẻ.

    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. Sử dụng một nhóm quản lý quyền truy cập mà bạn đã thiết lập trước đó trong phần cài đặt dự án.

    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. Cập nhật người dùng hiện tại.

    Swift

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

    Objective-C

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. Giờ đây, người dùng có thể được truy cập bởi những ứng dụng khác có quyền truy cập vào cùng một nhóm truy cập.