추가 범위 요청

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

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

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

이 기법을 사용하면 신규 사용자가 부담을 느끼지 않도록 하거나 사용자에게 특정 권한을 요청하는 이유를 혼동하지 않도록 할 수 있습니다.

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

사용자가 로그인 시 요청되지 않은 범위가 필요한 작업을 실행할 때마다 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에 전달하여 권한 집합을 더 편리하게 확인하고 획득할 수도 있습니다.