Android용 권한 관리

기본 로그인 중에 사용자의 공개 프로필과 이메일에 대한 액세스 권한이 앱에 부여됩니다. 추가 프로필 정보에 액세스하거나 사용자 대신 Facebook에 콘텐츠를 게시하려면 다음과 같은 필수 권한을 요청해야 합니다.

  • 기본 공개 프로필 필드 - 기본 프로필 정보에 대한 액세스 권한을 제공합니다.

  • 읽기 권한 - 사용자가 Facebook 프로필에 추가하는 기타 모든 정보는 다른 읽기 권한을 통해 보호됩니다.

  • 쓰기 권한 - 앱에서 사용자 대신 콘텐츠를 게시하기 위한 별도의 게시 권한이 필요합니다.

다음은 앱에서 권한을 관리하는 방법입니다.

  • 앱이 누군가에게 Facebook 요청을 보낼 때 필수 권한을 확인하고, 필요한 경우 권한을 요청해야 합니다.

  • 앱에서 권한을 요청하고 재시도하여 Facebook에서 누락된 권한 오류를 처리해야 합니다.

  • 앱 사용자가 Facebook에서 권한을 취소할 수 있지만, 개발자가 다시 앱에서 권한을 구현할 수 있습니다.

  • 로그인을 완전히 취소하는 메커니즘을 구현하여 사용자가 앱에서 기본 로그인 권한을 삭제하도록 허용할 수 있습니다.

권한 가이드에서 사용 가능한 여러 다른 권한에 대해 자세히 알아보세요.

게시 권한을 부여하는 것은 사용자에게는 민감한 사안이므로 초기 로그인 중이 아니라 사용자가 앱에서 무언가를 게시하려고 할 때만 게시 권한을 요청해야 합니다.

추가 권한 얻기

기본 로그인 중에 사용자의 공개 프로필과 이메일에 대한 액세스 권한이 앱에 부여됩니다. 추가 프로필 정보에 액세스하거나 다른 사용자 대신 Facebook에 콘텐츠를 게시하려면 다음과 같은 필수 권한을 요청해야 합니다.

여기에서 user_status를 가져옵니다. 로그인 및 권한을 위한 맞춤 UI 또는 LoginButton 버튼에 이러한 권한을 전달할 수 있습니다.

다음과 같이 MainFragment 클래스에서 onCreateView()의 코드를 수정합니다.

...
LoginButton authButton = (LoginButton)view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("user_status"));

return view;
...

읽기 권한 얻기

LoginManager는 단일 개체 인스턴스이며, AccessToken의 currentAccessToken과 작동합니다. 성공적으로 로그인하고 나면 currentAccessToken이 설정됩니다. 추가 권한을 요청하려면 logInWithPermissionName 메서드를 호출하기만 하면 됩니다.

항상 logInWithPermissionName 메서드에서 UI를 열고, 필요에 따라 추가 권한을 요청하는 메시지를 사용자에게 표시합니다. 추가 권한을 얻으려면 Android용 Facebook SDK를 사용하여 요청하세요.

LoginManager.getInstance().logInWithReadPermissions(
    fragmentOrActivity,
    Arrays.asList("email"));

이 코드는 앱에 이미 부여된 권한 그 이상을 요청하는 데 사용하며, 이는 최초 로그인 이후에 사용할 수 있습니다.

권한 참고 자료에 나열된 읽기 권한에서 여러 권한을 요청할 수 있습니다.

게시 권한 얻기

로그인 중에 얼마든지 읽기 권한 또는 게시 권한을 요청할 수 있습니다. 5개 이상의 권한을 요청하면 로그인 완료 수가 현저히 줄어듭니다.

2018년 4월 24일부터 publish_actions 권한이 삭제되었습니다. 자세한 내용은 핵심 변경 사항을 참조하세요. 앱 사용자에게 Facebook에 콘텐츠를 공유할 수단을 제공할 때는 Facebook의 공유 제품을 대신 사용하는 것이 좋습니다.

로그인 중에 publish_actions로 게시 권한을 요청하면 로그인 UI의 두 번째 단계가 생성됩니다. 따라서 로그인 중에 읽기 권한을 최소한으로 요청한 다음 실제로 필요할 때 사용자에게 추가 읽기 또는 게시 권한을 요청합니다. 권한 요청을 최적화하려면 권한 최적화를 참조하세요.

앱에서 게시 권한을 요청하려면 다음과 같이 LoginManager를 사용할 수 있습니다.

LoginManager.getInstance().logInWithPublishPermissions(
    fragmentOrActivity,
    Arrays.asList("publish_actions"));

그러면 로그인 중에 앱에서 이미 받은 권한 이외에 다른 권한을 요청합니다.

권한 재요청

로그인 시 부여된 public profile을 제외하고 사용자는 개발자가 요청하는 권한의 일부만 부여할 수 있습니다.

현재 액세스 토큰과 연결된 권한 리스트를 가져오려면 다음과 같이 호출합니다.

AccessToken.getCurrentAccessToken().getPermissions();

거부된 권한 리스트를 가져오려면 다음과 같이 호출합니다.

AccessToken.getCurrentAccessToken().getDeclinedPermissions();

개발자가 앱에 부여하도록 요청한 권한 중 하나를 사용자가 거부하는 경우, 앱에서 이를 처리할 수 있어야 합니다. 거부된 권한이 하나라도 있어야 하는 경우 위의 예시에서처럼 LoginManager를 사용하여 다시 요청할 수 있습니다.

로그인 검수

Facebook 로그인을 구현할 때 앱에서 일부 사용자 데이터에 대한 권한을 선택적으로 요청할 수 있습니다.

앱에서 기본 공개 프로필 필드 및 이메일 권한 그 이상을 요청하는 경우 개발자는 앱을 출시하기 전에 Facebook의 검수를 받아야 합니다. 검수 절차와 검수를 통과하는 데 필요한 사항에 대해 자세히 알아보세요.

로그인 검수 가이드