Để 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 chuỗi khoá dùng chung bằng Dịch vụ Keychain và định cấu hình ứng dụng để 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à đăng nhập trên tất cả các ứng dụng có cùng quyền truy cập nhóm.
- Đăng xuất một lần và đăng xuất khỏi tất cả ứng dụng có cùng quyền truy cập nhóm.
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:
Thiết lập một nhóm truy cập cho các ứng dụng của bạn.
Bạn có thể dùng nhóm truy cập chuỗi khoá hoặc nhóm ứng dụng. Xem bài viết Chia sẻ quyền truy cập vào các mục chuỗi khoá trong bộ sưu tập ứng dụng để biết thông tin chi tiết.
Để thiết lập nhóm truy cập chuỗi khoá, hãy làm như sau cho từng ứng dụng:
- Trong Xcode, hãy chuyển đến phần Cài đặt dự án > Chức năng.
- Bật chia sẻ chuỗi khóa.
- 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 bạn muốn chia sẻ trạng thái.
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.
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];
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.
Auth.auth().signInAnonymously { result, error in // User signed in }
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Người dùng hiện tại vẫn có thể dùng được trong tất cả các ứng dụng của nhóm truy cập.
var user = Auth.auth().currentUser
FIRUser *user = FIRAuth.auth.currentUser;
Chuyển về chuỗi khoá không chia sẻ
Đặt nhóm truy cập thành
nil
để ngừng chia sẻ trạng thái xác thực.do { try Auth.auth().useUserAccessGroup(nil) } catch let error as NSError { print("Error changing user access group: %@", error) }
[FIRAuth.auth useUserAccessGroup:nil error:nil];
Đăng nhập người dùng bằng bất kỳ phương thức đăng nhập nào. Trạng thái người dùng sẽ không hiển thị với bất kỳ ứng dụng nào khác.
Auth.auth().signInAnonymously { result, error in // User signed in }
[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:
Tham chiếu đến người dùng hiện tại để sử dụng trong tương lai.
var user = Auth.auth().currentUser
FIRUser *user = FIRAuth.auth.currentUser;
(Không bắt buộc) Kiểm tra trạng thái xác thực của nhóm truy cập mà bạn muốn chia sẻ.
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 }
Sử dụng một nhóm truy cập mà bạn đã thiết lập trước đây trong phần cài đặt dự án.
do { try Auth.auth().useUserAccessGroup(accessGroup) } catch let error as NSError { print("Error changing user access group: %@", error) }
[FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
Cập nhật người dùng hiện tại.
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
Giờ đây, các ứng dụng khác có quyền truy cập vào cùng một nhóm truy cập có thể truy cập vào người dùng này.