기본 로그인 중에 사용자의 공개 프로필에 대한 액세스 권한이 앱에 부여됩니다. 추가 프로필 정보에 액세스하거나 다른 사용자 대신 Facebook에 콘텐츠를 게시하려면 추가 권한을 요청해야 합니다. 자세한 내용은 Facebook 로그인 권한을 참조하세요.
앱에서 다음과 같이 권한을 관리해야 합니다.
그래프 API 요청 - 그래프 API 요청을 보내기 전에 필수 권한을 확인하고 필요에 따라 요청해야 합니다.
누락 및 취소된 권한 - 앱에서 권한을 요청하고 재시도하는 등의 조치를 통해 Facebook에서 누락되거나 취소된 권한 오류를 처리해야 합니다. 오류 처리, iOS SDK를 참조하세요.
경우에 따라 요청 - 필요할 때만 권한을 요청하고 모든 권한을 사용할 필요 없는 기능을 제공하면 전환율이 높아집니다.
FBSDKLoginButton
으로 로그인 시 권한을 요청하려면 permissions
속성을 다음과 같이 설정합니다.
let loginButton = FBLoginButton() loginButton.permissions = ["public_profile", "email"]
FBSDKLoginButton
대신 맞춤 로그인 버튼을 사용할 경우 LoginManager
를 사용하여 로그인할 수 있습니다.
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 } }
loginManager
를 호출하기 전에 기존 토큰의 가용성을 확인해야 합니다. iOS용 Facebook 로그인을 참조하세요.
현재 권한을 확인하려면 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. }]; }
FBSDKLoginManager
콜백 또는 FBSDKLoginButton
델리게이트에 반환된 FBSDKLoginResult
를 검사하여 사용자가 권한 요청을 거부했는지 확인합니다.
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 { // ... } }];
그래프 API 요청을 수행할 때 NSError
개체를 검사하여 권한 오류가 있는지 확인할 수 있습니다.
[[[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"); } }];
자세한 내용은 오류 처리, iOS SDK를 참조하세요.
FBSDKLoginManager
를 사용하여 추가 권한을 요청하거나 logInWith*:
메서드를 사용하여 이전에 거부된 권한을 요청합니다. FBSDKLoginManager
에서는 [FBSDKAccessToken currentAcccessToken]
의 이용 가능 여부에 의한 재요청인지 확인합니다.
사용자가 이전에 앱에 부여된 특정 권한을 삭제하거나 취소하도록 설정할 수 있습니다. 예를 들어 앱에는 사용자가 특정 기능을 비활성화할 수 있는 설정 페이지가 있을 수 있습니다.
그래프 API 엔드포인트를 호출하여 권한을 취소합니다.
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email" parameters:nil HTTPMethod:@"DELETE"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // ... }];
모든 권한을 삭제하는 그래프 API를 호출하여 앱의 모든 권한을 취소할 수 있습니다. 권한 취소에 있는 코드를 사용하고 요청 경로를 /me/permissions
로 변경합니다.
앱을 사용하지 않고 테스트 용도로 취소 권한을 승인 해제할 수 있습니다. 그래프 API 탐색기를 사용하여 이 작업을 수행할 수 있습니다.
Get Token
> Get Access Token
을 클릭합니다.Clear
를 클릭하여 선택한 앱을 승인 해제합니다.단일 권한을 취소하려면 다음을 수행합니다.
publish_actions
와 같은 {permission-name}
에 대해 삭제할 권한을 사용하는 중에 경로 입력 필드를 /me/permissions/{permission-name}
으로 설정합니다.GET
에서 DELETE
로 전환합니다.Submit
버튼을 누릅니다.