Giới hạn đăng nhập dành cho iOS

Với phương thức Giới hạn đăng nhập, các nhà phát triển có thể cho biết rằng hoạt động đăng nhập bị giới hạn ở khía cạnh theo dõi người dùng.

Nội dung dự kiến

Sau mỗi lần đăng nhập thành công, hệ thống sẽ điền phiên bản AuthenticationToken chung để cung cấp thông tin về lần đăng nhập có thể dùng để xác minh quy trình xác thực trên máy chủ của khách hàng. Ngoài ra, chúng tôi sẽ điền phiên bản Trang cá nhân được chia sẻ. Phiên bản này sẽ chứa các thông tin cơ bản như ID người dùng trong ứng dụng, tên và ảnh đại diện của người dùng.

Quyền

Bạn có thể yêu cầu các quyền có sẵn sau:

  • public_profile
  • email
  • gaming_profile
  • gaming_user_picture
  • user_age_range
  • user_birthday
  • user_friends
  • user_gender
  • user_hometown
  • user_link
  • user_location
  • user_messenger_contact

Mã nonce tùy chỉnh

Với phương thức Giới hạn đăng nhập, các nhà phát triển có thể chuyển một mã nonce dùng để xác minh quy trình xác thực trên máy chủ của họ. Để biết thông tin về cách sử dụng mã nonce để xác thực mã, hãy xem bài viết Xác thực mã OIDC cho phương thức Giới hạn đăng nhập.

Các giới hạn

Tính năng chuyển đổi ứng dụng - trong đó hộp thoại đăng nhập được hiển thị cho người dùng trong ứng dụng Facebook dành cho iOS khi họ đã đăng nhập - không được hỗ trợ cho quy trình giới hạn đăng nhập.

Thành phần API mới

Facebook SDK dành cho iOS cung cấp tùy chọn liệt kê mới là FBSDKLoginTracking. Các giá trị có thể sử dụng là enabledlimited. Đối với phương thức Giới hạn đăng nhập, hãy sử dụng limited.

enum LoginTracking {
    case enabled
    case limited
}
typedef NS_ENUM(NSUInteger, FBSDKLoginTracking)
{
  FBSDKLoginTrackingEnabled,
  FBSDKLoginTrackingLimited,
} NS_SWIFT_NAME(LoginTracking);

Ngoài ra, phương thức Giới hạn đăng nhập sử dụng FBSDKLoginConfiguration để sửa đổi hoạt động mặc định của lần đăng nhập. Bạn có thể tạo cấu hình này với các thuộc tính mặc định, thuộc tính rõ ràng (chỉ Swift) hoặc bằng một trong các trình khởi tạo:

init?(
    permissions: Set
initWithPermissions:(NSArray\<NSString *> *)permissions                                                          
           tracking:(FBSDKLoginTracking)tracking
              nonce:(NSString *)nonce

Thuộc tính

Thuộc tínhMô tả

requestedPermissions: Set<Permissions> (Swift)

Các quyền được yêu cầu cho lần đăng nhập. Mặc định là tập dữ liệu trống.

requestedPermissions: Set<String> (ObjC)

Các quyền được yêu cầu cho lần đăng nhập. Mặc định là tập dữ liệu trống.

tracking: LoginTracking

Tùy chọn theo dõi đăng nhập. Giá trị mặc định là .enabled.

nonce: String

Mã nonce dùng để tạo cấu hình. Một mã nonce duy nhất sẽ được dùng nếu không có giá trị nào được cung cấp cho phương thức ban đầu.

Bạn sẽ không thể tạo cấu hình nếu không đáp ứng các điều kiện sau đây:

  • Mã nonce phải là chuỗi không trống và không chứa khoảng trống.

  • Bạn không thể yêu cầu những quyền nằm ngoài phạm vi theo dõi. Ví dụ: bạn không thể yêu cầu user_likes nếu tùy chọn theo dõi là .limited.

  • Để biết các quyền có thể yêu cầu, hãy xem phần Quyền.

Triển khai phương thức Giới hạn đăng nhập

Để trực tiếp triển khai phương thức Giới hạn đăng nhập trong ứng dụng của bạn bằng lớp trình quản lý đăng nhập, hãy nâng cấp lên phiên bản mới nhất của Facebook SDK dành cho iOS và sử dụng mã sau:

let loginManager = LoginManager()

// Ensure the configuration object is valid
guard let configuration = LoginConfiguration(
	permissions:["email", "user_friends", "user_birthday", "user_age_range", "user_gender", "user_location", "user_hometown", "user_link"],  
	tracking: .limited,
	nonce: "123"
) 
else {
    return
}

loginManager.logIn(configuration: configuration) { result in
    switch result {
    case .cancelled, .failed:
        // Handle error
        break
    case .success:
        // getting user ID
        let userID = Profile.current?.userID

        // getting pre-populated email
        let email = Profile.current?.email

        // getting pre-populated friends list
        let friendIDs = Profile.current?.friendIDs

        // getting pre-populated user birthday
        let birthday = Profile.current?.birthday

        // getting pre-populated age range
        let ageRange = Profile.current?.ageRange

        // getting user gender
        let gender = Profile.current?.gender
  
        // getting user location
        let location = Profile.current?.location
  
        // getting user hometown
        let hometown = Profile.current?.hometown
  
        // getting user profile URL
        let profileURL = Profile.current?.linkURL
  
        // getting id token string
        let tokenString = AuthenticationToken.current?.tokenString
    }
}
FBSDKLoginManager *loginManager = [FBSDKLoginManager new];
FBSDKLoginConfiguration *configuration =
  [[FBSDKLoginConfiguration alloc] initWithPermissions:@[@"email", @"user_friends", @"user_birthday", @"user_age_range", @"user_hometown", @"user_location", @"user_gender", @"user_link"]
                                              tracking:FBSDKLoginTrackingLimited
                                                 nonce:@"123"];
[loginManager logInFromViewController:self
                        configuration:configuration
                           completion:^(FBSDKLoginManagerLoginResult * result, NSError *error) {
  if (!error && !result.isCancelled) {
    // Login successful

    // getting user ID
    NSString *userID =
      FBSDKProfile.currentProfile.userID;

    // getting id token string
    NSString *idTokenString =
      FBSDKAuthenticationToken.currentAuthenticationToken.tokenString;

    // fetching pre-populated email
    NSString *email = FBSDKProfile.currentProfile.email;
  
    // getting pre-populated friends list
    NSArray<FBSDKUserIdentifier *> *friendIDs = FBSDKProfile.currentProfile.friendIDs;

    // getting pre-populated user birthday
    NSDate *birthday = FBSDKProfile.currentProfile.birthday;

    // getting pre-populated age range
    FBSDKUserAgeRange *ageRange = FBSDKProfile.currentProfile.ageRange;  
  
    // getting pre-populated age range
    FBSDKLocation *hometown = FBSDKProfile.currentProfile.hometown;  
  
    // getting pre-populated age range
    FBSDKLocation *location = FBSDKProfile.currentProfile.location;  
  
    // getting pre-populated age range
    NSString *gender = FBSDKProfile.currentProfile.gender;  
  
    // getting pre-populated age range
    NSURL *userLink = FBSDKProfile.currentProfile.linkURL;  
  }
}];

Để triển khai phương thức Giới hạn đăng nhập trong ứng dụng của bạn bằng nút đăng nhập, hãy nâng cấp lên phiên bản mới nhất của Facebook SDK dành cho iOS và sử dụng mã sau:

override func viewDidLoad() {
    super.viewDidLoad()

    setupLoginButton()
}
  
func setupLoginButton() {
    loginButton.delegate = self
    
    loginButton.permissions = ["email"]
    loginButton.loginTracking = .limited
    loginButton.nonce = "123" as NSString
}

func loginButton(
    _ loginButton: FBLoginButton,
    didCompleteWith potentialResult: LoginManagerLoginResult?,
    error potentialError: Error?
) {
    if let error = potentialError {
        // Handle Error
    }

    guard let result = potentialResult else {
        // Handle missing result  
    }
        
    guard !result.isCancelled else {
        // Handle cancellation
    }

    // Handle successful login
  
    let userID = Profile.current?.userID
    let email = Profile.current?.email
    let tokenString = AuthenticationToken.current?.tokenString
}
- (void)viewDidLoad
{
  [super viewDidLoad];

  [self setupLoginButton];
}
  
- (void)setupLoginButton
{
  self.loginButton.delegate = self;  
  self.loginButton.permissions = @[@"email"]
  self.loginButton.loginTracking = FBSDKLoginTrackingLimited
  self.loginButton.nonce = @"123"
}

- (void)    loginButton:(FBSDKLoginButton *)loginButton
  didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
                  error:(NSError *)error
{
  if (error) {
    // Handle error
  }

  if (result && result.isCancelled) {
    // Handle cancellation
  }

  // Handle success
}