권한 요청 및 취소

로그인 플로의 각 유형에는 플랫폼과 Facebook 로그인 통합 방법에 따라 자체적인 권한 요청 방법이 있습니다.

모바일 앱

  • Android 로그인은 여러 가지 클래스를 사용하여 권한을 요청하고 관리할 수 있습니다. 자세한 내용은 Android 로그인 튜토리얼을 참조하세요.
  • iOS 로그인은 여러 가지 방법으로 권한을 요청할 수 있습니다. 자세한 내용은 iOS 로그인 튜토리얼을 참조하세요.
  • Windows Phone은 URI 연결을 시작할 때 scope 매개변수를 사용합니다.

위에 나와 있는 API 대부분은 최초 로그인뿐만 아니라 앱 수명 주기가 유지되는 동안 나중에 추가 권한을 요청하는 데 사용할 수도 있습니다.

권한 요청 최적화

통상적으로 앱이 많은 권한을 요청할수록 Facebook을 통해 앱에 로그인할 가능성이 줄어듭니다. 사실 5개 이상의 권한을 요청하는 앱은 로그인 완료 수가 현저히 줄어든다는 조사 결과가 나왔습니다.

가이드라인

로그인 도중과 그 이후에 권한을 요청할 때 사용할 몇 가지 가이드라인은 다음과 같습니다.

  • 앱에 필수적인 권한만 요청하세요.

  • 꼭 필요한 경우에만 권한을 요청하세요. 예를 들어 앱에서 사용자 위치 근처에 있는 관심 장소를 표시하고자 하는 경우, 이 정보를 표시하기 직전에 user_location을 요청하면 이 권한을 요청하는 이유를 사용자가 더욱 명확하게 이해할 수 있습니다.

  • 읽기와 게시 권한 요청을 분리하세요. 자세한 내용은 아래를 참조하세요.

  • 나중에 필요할 수 있다고 생각하는 권한은 절대 요청하지 마세요. 사용자가 의심스러워하고 앱을 거부할 수 있습니다.

  • 사용자에게 권한을 요청하는 이유를 미리 설명하세요. 무언가에 액세스해야 하는 이유를 설명하면 사용자가 이를 공유할 가능성이 높아집니다.


게시 권한

앱은 읽기와 게시 권한 요청을 분리해야 합니다. 최초 로그인 시 최소한의 읽기 권한만 요청한 다음, 실제로 필요할 때 게시 권한을 요청하는 방식으로 앱을 계획하세요(예를 들어 앱 내에서 오픈 그래프 소식을 생성하고자 하는 경우). 그러면 최적의 사용자 경험이 제공되고 전환이 최적화됩니다.

앱에서 연달아 읽기 및 게시 권한을 요청할 경우 개발자 알림을 받을 수도 있습니다. 이 알림을 수신하지 않으려면 요청을 분리하거나, 예외적인 경우 아래의 가이드라인을 따르세요.

간혹 앱에서 미리 게시 권한이 필요한 경우(예: 사용자의 기분을 Facebook에 게시하는 기능만 있는 앱) 최초 로그인 시 최소한의 읽기 권한만 요청하세요. 사용자가 로그인한 후 앱에서 게시 권한이 필요한 이유를 설명하고 버튼을 클릭하여 게시 권한 요청을 옵트인할 수 있는 화면을 사용자에게 표시합니다. 그러면 더 많은 컨텍스트가 제공되고 전환을 늘릴 수 있습니다.

읽기와 쓰기 권한을 연달아 요청해야 하는 경우는 처음으로 이메일 기반 계정을 사용자의 Facebook 계정과 연결하는 시점입니다. 이는 일반적으로 사용자가 Facebook 타임라인에 스토리를 공유하고자 할 때 발생합니다. 앱에서 로그인 대화 상자를 생성하면 사용자에게는 연속해서 두 개의 대화 상자가 보입니다. 하나는 계정을 앱과 연결하는 대화 상자이고 나머지 하나는 게시 권한을 요청하는 대화 상자입니다. 이 경우 읽기 권한은 public_profile만 요청합니다. 사용자는 앱에서 게시하기를 원하고 추가적인 읽기 권한을 제공하는 데는 관심이 없는 경우가 많기 때문에 이를 통해 최적의 사용자 경험을 제공할 수 있습니다. 따라서 전환도 늘어납니다.

현재 권한 확인

Facebook은 사용자에게 앱에 부여하는 권한에 대한 완전한 제어권을 제공합니다. 이러한 제어권은 로그인 대화 상자를 보는 시점 이후까지 확장됩니다. 사용자는 로그인 과정에서 특정 권한을 부여하지 않을 수 있습니다. 또한 언제든 Facebook 개인정보 설정에서 권한을 취소할 수 있습니다. 앱은 권한의 유효성을 확인한 다음, 필요한 경우에 API 호출을 시도해야 합니다. 예를 들어 메시지를 전송하기 전에 여전히 email 권한이 부여된 상태인지 확인합니다.

웹 앱의 경우, 앱에 부여된 권한 리스트를 가져오기 위한 그래프 API 엔드포인트를 제공합니다.

GET /{user-id}/permissions

이 호출은 사용자 액세스 토큰이나 앱 액세스 토큰으로 보내야 합니다. 이 호출에서 앱에 부여된 권한 이름과 각각의 상태를 포함한 JSON 문자열이 반환됩니다.

{
  "data": [
    {
      "permission": "public_profile",
      "status": "granted"
    },
    {
      "permission": "email",
      "status": "granted"
    },
    {
      "permission": "user_friends",
      "status": "declined"
    }
  ]
}

Facebook은 iOSAndroid SDK에서 앱에 부여된 권한을 플랫폼에서 사용하기 쉽게 표현하는 메서드를 제공합니다.

누락된 권한 처리

앱이 권한을 요청하면 사용자는 권한을 완전히 거부하거나, 일부 권한만 부여하거나, 나중에 변경할 수 있습니다. 좋은 경험을 제공하려면 앱에서 이러한 상황을 처리하도록 빌드해야 합니다.

먼저 앱은 요청했지만 부여되지 않은 권한을 처리할 수 있어야 합니다.

  • 권한이 필요한 API를 사용하기 전에 부여된 권한을 확인합니다.
  • 적절한 권한 없이 API 요청을 보내면 권한 감지 오류가 반환됩니다. 오류 예시는 다음과 같습니다.
{
  "error": {
    "message": "(#200) The user hasn't authorized the application
     to perform this action",
    "type": "OAuthException",
    "code": 200
  }
}

앱에서 누군가 일부 또는 모든 권한을 거부한 것을 감지한 경우, 로그인 플로를 통해 다시 한번 전달하고 필수 권한을 요청할 수 있습니다. 그러나 이는 좋지 못한 경험이므로 되도록 피해야 합니다. 누군가 앱에 특정 권한을 부여하지 않기로 직접 선택했다면 지속적으로 메시지를 표시하더라도 생각이 바뀔 가능성은 낮습니다. 대신 다음과 같은 조치를 취하세요.

  • 사용자가 로그인 대화 상자를 거부하는 경우 각 권한을 요청하는 이유를 미리 명확하게 설명합니다. 그런 다음, 클릭이나 탭을 통해 권한 요청 대화 상자로 다시 돌아오도록 합니다. 아무런 설명 없이 바로 권한 요청 대화 상자로 보내지 마세요.

  • 누군가가 앱에 대한 권한을 거부한 경우, 로그인 대화 상자에서는 해당 권한을 다시 요청할 수 없습니다. 단, 요청과 함께 auth_type=rerequest를 전달하는 경우는 예외입니다.

  • 누군가가 일부 권한은 부여하고 일부 권한은 거부한 경우, 필요한 시점에 누락된 권한에 대해서만 요청합니다. 예를 들어 앱이 사용자 이메일로 주문 확인을 보낼 경우 사용자가 주문을 넣었을 때만 email을 요청하세요.

  • 단, 로그인 대화 상자에서 요청하는 권한이 앱 기능에 중요하고 이 권한 없이는 기능이 작동하지 않을 경우 사용자가 권한 없이 앱을 계속 사용하도록 합니다.

사용자가 권한을 거부한 후에도 앱에서 반복적으로 사용자를 권한 대화 상자로 보내면 개발자 알림을 받을 수 있습니다. 이러한 알림이 수신되지 않도록 하려면 다음의 가이드라인을 따르세요.

권한 취소

앱은 이전에 부여된 권한을 취소하도록 할 수 있습니다. 예를 들어 사용자가 앱의 설정 페이지에서 이메일 메시지 전송을 비활성화할 수 있습니다. 그와 동시에 이 설정 페이지에서 email 권한을 취소할 수도 있습니다.

그래프 API 엔드포인트로 호출을 보내 특정 권한을 취소할 수 있습니다.

DELETE /{user-id}/permissions/{permission-name}

이 요청은 현재 앱에 대해 사용자 액세스 토큰이나 앱 액세스 토큰과 함께 보내야 합니다. 요청이 성공하면 true 응답을 수신합니다.


로그인 취소

이 그래프 API 엔드포인트에 호출을 보내면 사용자가 앱에 대한 권한 부여를 완전히 취소하거나, 로그인을 취소하도록 할 수 있습니다.

DELETE /{user-id}/permissions

이 요청은 현재 앱에 유효한 사용자 액세스 토큰이나 앱 액세스 토큰과 함께 보내야 합니다. 요청이 성공하면 true 응답을 수신합니다. 호출이 성공하면 해당 사용자에 대한 모든 사용자 액세스 토큰은 무효화되고 해당 사용자는 다시 로그인해야 합니다. 또한 앱에 대한 권한 부여가 취소되었기 때문에 처음 로그인할 때처럼 앱에 액세스 권한을 부여해야 합니다.

플랫폼 가이드

AndroidiOS