추가 범위 요청

최상의 사용자 환경을 제공하려면 사용자를 처음 로그인할 때 최대한 적은 범위를 요청해야 합니다. 앱의 핵심 기능이 Google 서비스에 연결되어 있지 않은 경우 GoogleSignInOptions.DEFAULT_SIGN_IN 구성만으로 로그인 시 필요한 경우가 많습니다.

앱에 Google API 데이터를 사용할 수 있지만 앱의 핵심 기능의 일부로 필요하지 않은 기능이 있다면 API 데이터에 액세스할 수 없는 경우를 적절하게 처리할 수 있도록 앱을 설계해야 합니다. 예를 들어 사용자가 Drive 액세스 권한을 부여하지 않은 경우 최근에 저장된 파일 목록을 숨길 수 있습니다.

사용자가 특정 API에 액세스해야 하는 작업을 실행할 때만 Google API에 액세스하는 데 필요한 추가 범위를 요청해야 합니다. 예를 들어 사용자가 '드라이브에 저장' 버튼을 처음 탭할 때만 사용자의 드라이브에 대한 액세스 권한을 요청할 수 있습니다.

이 기법을 사용하면 신규 사용자가 부담스러워하거나 특정 권한을 요청하는 이유에 관해 사용자를 혼란스럽게 하지 않을 수 있습니다.

사용자 작업에 필요한 권한 요청

사용자가 로그인 시 요청되지 않은 범위가 필요한 작업을 실행할 때마다 GoogleSignIn.hasPermissions를 호출하여 사용자가 이미 필요한 권한을 부여했는지 확인합니다. 그렇지 않은 경우 GoogleSignIn.requestPermissions를 호출하여 사용자에게 추가 필수 범위를 요청하는 활동을 시작합니다.

예를 들어 사용자가 Drive 앱 스토리지에 액세스해야 하는 작업을 실행하는 경우 다음을 실행하세요.

if (!GoogleSignIn.hasPermissions(
        GoogleSignIn.getLastSignedInAccount(getActivity()),
        Drive.SCOPE_APPFOLDER)) {
    GoogleSignIn.requestPermissions(
            MyExampleActivity.this,
            RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION,
            GoogleSignIn.getLastSignedInAccount(getActivity()),
            Drive.SCOPE_APPFOLDER);
} else {
    saveToDriveAppFolder();
}

활동의 onActivityResult 콜백에서 필요한 권한을 성공적으로 획득했는지 확인하고 획득했다면 사용자 작업을 실행할 수 있습니다.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION == requestCode) {
            saveToDriveAppFolder();
        }
    }
}

GoogleSignInOptionsExtensionhasPermissionsrequestPermissions에 전달하여 더 편리하게 권한 집합을 확인하고 획득할 수도 있습니다.