Запрос дополнительных областей

Для обеспечения наилучшего взаимодействия с пользователем при первоначальном входе пользователей следует запрашивать как можно меньше областей. Если основные функции вашего приложения не привязаны к службе Google, конфигурация GoogleSignInOptions.DEFAULT_SIGN_IN часто является всем, что вам нужно при входе в систему.

Если в вашем приложении есть функции, которые могут использовать данные API Google, но не являются обязательными для его основных функций, вам следует спроектировать свое приложение таким образом, чтобы оно могло корректно обрабатывать случаи, когда данные API недоступны. Например, вы можете скрыть список недавно сохраненных файлов, если пользователь не предоставил доступ к Диску.

Вам следует запрашивать дополнительные области, необходимые для доступа к API Google, только тогда, когда пользователь выполняет действие, требующее доступа к определенному API. Например, вы можете запросить разрешение на доступ к Диску пользователя только тогда, когда пользователь впервые нажимает кнопку «Сохранить на Диск».

Используя этот метод, вы можете избежать перегрузки новых пользователей или запутывания их в том, почему у них запрашиваются определенные разрешения.

Запрос разрешений, необходимых для действий пользователя

Всякий раз, когда пользователь выполняет действие, требующее области, которая не запрашивается при входе в систему, вызовите GoogleSignIn.hasPermissions , чтобы проверить, предоставил ли уже пользователь необходимые разрешения. Если нет, вызовите GoogleSignIn.requestPermissions , чтобы запустить действие, которое запрашивает у пользователя дополнительные необходимые области.

Например, если пользователь выполняет действие, требующее доступа к хранилищу приложений на Диске, выполните следующие действия:

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();
        }
    }
}

Вы также можете передать GoogleSignInOptionsExtension в hasPermissions и requestPermissions для более удобной проверки и получения набора разрешений.