권한 관리(iOS)

기본 로그인 중에 사용자의 공개 프로필에 대한 액세스 권한이 앱에 부여됩니다. 추가 프로필 정보에 액세스하거나 다른 사용자 대신 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 탐색기를 통해 권한 취소

앱을 사용하지 않고 테스트 용도로 취소 권한을 승인 해제할 수 있습니다. 그래프 API 탐색기를 사용하여 이 작업을 수행할 수 있습니다.

  1. 그래프 API 탐색기에 액세스합니다.
  2. 앱을 선택합니다.
  3. Get Token > Get Access Token을 클릭합니다.
  4. Clear를 클릭하여 선택한 앱을 승인 해제합니다.

단일 권한을 취소하려면 다음을 수행합니다.

  1. 예를 들어 publish_actions와 같은 {permission-name}에 대해 삭제할 권한을 사용하는 중에 경로 입력 필드를 /me/permissions/{permission-name}으로 설정합니다.
  2. GET에서 DELETE로 전환합니다.
  3. Submit 버튼을 누릅니다.
그래프 API 탐색기