Trong quá trình đăng nhập cơ bản, ứng dụng của bạn sẽ nhận được quyền truy cập vào trang cá nhân công khai của một người. Để truy cập các thông tin khác trên trang cá nhân hoặc thay mặt người đó đăng nội dung lên Facebook, bạn cần yêu cầu cấp thêm quyền. Hãy xem phần Quyền khi Đăng nhập bằng Facebook.
Ứng dụng của bạn nên quản lý các quyền như sau:
Yêu cầu API Đồ thị – Trước khi gửi yêu cầu API Đồ thị, bạn nên kiểm tra các quyền cần thiết và yêu cầu cấp các quyền đó nếu cần.
Thiếu quyền và quyền bị thu hồi – Ứng dụng của bạn cần xử lý các lỗi thiếu quyền hoặc quyền bị thu hồi từ Facebook, chẳng hạn như bằng cách yêu cầu cấp quyền rồi thử lại. Hãy xem phần Xử lý lỗi, iOS SDK.
Yêu cầu đúng lúc – Bạn sẽ đạt được lượt chuyển đổi tốt hơn nếu chỉ yêu cầu cấp quyền khi cần và cung cấp chức năng mà không đòi hỏi tất cả các quyền.
Để yêu cầu cấp quyền khi đăng nhập bằng FBSDKLoginButton
, hãy đặt thuộc tính permissions
:
let loginButton = FBLoginButton() loginButton.permissions = ["public_profile", "email"]
Nếu đang sử dụng một nút đăng nhập tùy chỉnh thay cho FBSDKLoginButton
, bạn có thể sử dụng LoginManager
để thực hiện đăng nhập:
override func viewDidLoad() { super.viewDidLoad() ... loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside) } @objc func loginButtonClicked() { let loginManager = LoginManager() loginManager.logIn(permissions: ["email"], from: self) { result, error in // Process result or error } }
Bạn nên kiểm tra xem mã hiện tại có dùng được hay không trước khi gọi loginManager
. Hãy xem phần Đăng nhập bằng Facebook dành cho iOS
Để kiểm tra các quyền hiện tại, hãy kiểm tra FBSDKAccessToken
.
if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"email"]) { // TODO: publish content. } else { FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; [loginManager logInWithPublishPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { //TODO: process error or result. }]; }
Hãy kiểm tra FBSDKLoginResult
được trả về cho lệnh gọi lại FBSDKLoginManager
hoặc cho đối tượng ủy quyền FBSDKLoginButton
để xem yêu cầu cấp quyền có bị từ chối hay không:
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; [loginManager logInWithPublishPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if ([result.declinedPermissions containsObject:@”email”]) { // TODO: do not request permissions again immediately. Consider providing a NUX // describing why the app want this permission. } else { // ... } }];
Khi gửi các yêu cầu API Đồ thị, bạn có thể kiểm tra đối tượng NSError
để xem có bị lỗi quyền hay không:
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/feed" parameters:@{ @"message" : @"This is a status update" } HTTPMethod:@"POST"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if ([error.userInfo[FBSDKGraphRequestErrorGraphErrorCode] isEqual:@200]) { NSLog(@"permission error"); } }];
Để biết thêm thông tin, hãy xem phần Xử lý lỗi, iOS SDK.
Hãy sử dụng FBSDKLoginManager
để yêu cầu cấp thêm quyền hoặc yêu cầu cấp các quyền từng bị từ chối bằng phương thức logInWith*:
. FBSDKLoginManager
sẽ xem đây là yêu cầu lại do có [FBSDKAccessToken currentAcccessToken]
.
Bạn có thể cho phép ai đó gỡ hoặc thu hồi các quyền cụ thể từng được cấp cho ứng dụng của bạn. Ví dụ: ứng dụng của bạn có thể có trang cài đặt để mọi người tắt các tính năng cụ thể.
Hãy thu hồi quyền bằng cách thực hiện lệnh gọi đến điểm cuối API Đồ thị.
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email" parameters:nil HTTPMethod:@"DELETE"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // ... }];
Bạn có thể thu hồi mọi đặc quyền cho một ứng dụng bằng cách thực hiện lệnh gọi API Đồ thị để xóa tất cả các quyền. Hãy sử dụng mã trong phần Thu hồi quyền và thay đổi đường dẫn của yêu cầu thành /me/permissions
.
Vì mục đích thử nghiệm, bạn có thể muốn hủy cấp phép việc thu hồi quyền mà không dùng ứng dụng của mình. Bạn có thể sử dụng Trình khám phá API Đồ thị để hủy cấp phép.
Get Token
> Get Access Token
.Clear
để hủy cấp phép đối với ứng dụng đã chọn.Cách thu hồi một quyền:
/me/permissions/{permission-name}
cho {permission-name}
, chẳng hạn như email
.GET
thành DELETE
.Submit
.