Для максимального удобства пользователей следует запрашивать как можно меньше областей действия при первом входе. Если основные функции вашего приложения не привязаны к сервисам Google, конфигурации GoogleSignInOptions.DEFAULT_SIGN_IN зачастую достаточно для входа.
Если в вашем приложении есть функции, которые могут использовать данные API Google, но не являются обязательными для его основных функций, вам следует разработать приложение так, чтобы оно могло корректно обрабатывать ситуации, когда данные API недоступны. Например, вы можете скрыть список недавно сохранённых файлов, если пользователь не предоставил доступ к Диску.
Дополнительные области действия, необходимые для доступа к 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();
}
}
}
Вы также можете передать GoogleSignInOptionsExtension в hasPermissions и requestPermissions для более удобной проверки и получения набора разрешений.