거부된 권한 처리

사용자가 Facebook 로그인을 사용하여 앱에 로그인하거나 계정을 만들 때 개발자가 요청하는 권한을 부여할 수 있습니다. 또한 공개 프로필을 제외한 모든 권한을 거부할 수도 있습니다. 권한을 통해 제공하는 정보를 앱과 공유하는 것이 불편하게 느껴지거나 이 정보를 사용하여 어떻게 환경이 개선되는지 이해할 수 없는 경우 권한을 거부하도록 선택할 수 있습니다.

사용자가 권한을 거부하도록 선택하는 경우 앱에서 이러한 선택을 존중하고 지속적으로 우수한 환경을 제공하는 것이 중요합니다.

일반적으로 앱에서 다음 세 방법 중 하나로 권한 거부에 대응할 수 있습니다.

  1. 정보 없이 계속 진행
  2. 정보가 필요한 이유를 설명하고 정보를 요청하는 메시지를 다시 표시
  3. 직접 정보 수집

정보 없이 계속 진행

경우에 따라 요청한 특정 권한은 앱이 작동하는 데 필요하지 않을 수 있습니다. 이 경우 권한 거부를 존중하고 계속 앱을 실행하는 것이 가장 간단한 대응 방식입니다.

아래 예제에서는 Flick Finderuser_likes 권한에 액세스할 수 있었다면 더욱 구체적으로 영화를 추천할 수도 있었습니다. 하지만 사용자가 이 권한을 거부했으므로 Flick Finder에서는 일반적인 추천 영화만 표시합니다.

이는 권한 거부에 대한 가장 간단한 대응 옵션이며 특정 권한을 거부하도록 선택한 사용자에게 우수한 환경을 제공합니다.

이유를 설명하고 다시 메시지 표시

사용자가 앱에서 정보가 필요한 이유를 이해하지 못해서 권한을 거부할 수도 있습니다. 이 경우 정보가 필요한 이유와 환경을 향상시키는 데 이 정보를 어떻게 사용하는지를 설명하는 대화 상자를 앱에 표시할 수 있습니다.

아래 예제에서는 Flick Finder에서 대화 상자를 표시하여, 이용할 수 있는 새 영화가 있을 때 이메일 주소를 사용하여 앱에서 업데이트된 정보를 사용자에게 보낼 수 있음을 설명합니다. "이메일 추가" 버튼을 클릭하면 사용자가 email 권한을 부여할 수 있는 Facebook 로그인 플로로 되돌아갑니다.

이 예제에서도 여전히 email 권한을 부여하지 않을 수 있습니다.

이 전략은 앱의 기능에 중요하거나 매우 바람직한 권한에 사용할 수 있습니다.

직접 정보 수집

일부 정보는 매우 단순하여 개발자가 직접 수집할 수 있습니다.

이 예제에서는, Flick Finder에서 연령에 맞는 영화를 추천하기 위해 사용자의 생년월일을 수집하려 합니다. Facebook을 사용하여 로그인할 때 사용자가 생년월일 공유를 거부한 경우에도 Flick Finder에서는 Facebook 로그인 플로와 별도로 앱 내에서 정보를 수집하는 위치를 만들 수 있습니다. 권한을 통해 사용자의 환경이 어떻게 향상되는지 더욱 잘 파악할 수 있도록 사용자가 앱에 익숙해지는 시간을 갖은 후에 이 작업을 수행하는 것이 좋습니다.

이 방식으로 수집할 수 있는 정보에는 user_hometown, user_location, user_birthday 또는 email이 있습니다.

거부된 권한 감지

사용자가 Facebook 로그인 플로 중에 일부 권한을 거부한 경우 위에서 설명한 Facebook 전략 중 하나를 통해 앱에서 이 상황을 쉽게 감지하고 대응할 수 있습니다.

Android SDK

Android에서는 Android용 Facebook SDKAccessToken 개체에서 getDeclinedPermissions 메서드를 호출할 수 있습니다.

iOS SDK

iOS에서는 iOS용 Facebook SDK에서 [FBSDKAccessToken declinedPermissions] 메서드를 호출할 수 있습니다.

JavaScript SDK

거부된 권한을 감지하려면 그래프 API의 User 개체에서 permissions 에지를 호출할 수 있습니다. 다음과 같이 응답을 반복하여 거부된 권한을 수집할 수 있습니다.

FB.api('/me/permissions', function(response) {
  var declined = [];
  for (i = 0; i < response.data.length; i++) { 
    if (response.data[i].status == 'declined') {
      declined.push(response.data[i].permission)
    }
  }
  alert(declined.toString())
});

API

거부된 권한을 감지하려면 다음과 같이 그래프 API의 User 개체에서 permissions 에지를 호출할 수 있습니다.

GET https://graph.facebook.com/me/permissions?access_token=USER_ACCESS_TOKEN

그러면 다음과 같은 양식으로 응답하게 됩니다.

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

사용자가 user_birthdaypublic_profile 권한은 부여했지만 email 권한은 거부하도록 선택했음을 앱에 알립니다.

요약

우수한 Facebook 로그인 환경을 제공하기 위해서는 거부된 권한을 원활하게 처리하는 것이 중요합니다.

위의 전략 중 하나를 구현하면 앱의 평판과 App Store 평가에 영향을 미치는 앱 중단 및 불편한 상황이 발생하지 않으므로, 앱을 다운로드하고 설치하는 사용자가 원활하게 로그인할 수 있습니다.