Para ofrecer la mejor experiencia del usuario, debes solicitar la menor cantidad posible de permisos cuando los usuarios accedan por primera vez. Si la funcionalidad principal de tu app no está vinculada a un servicio de Google, la configuración de GoogleSignInOptions.DEFAULT_SIGN_IN suele ser todo lo que necesitas para acceder.
Si tu app tiene funciones que pueden usar datos de las APIs de Google, pero no son necesarias como parte de la funcionalidad principal de la app, debes diseñarla para que pueda controlar correctamente los casos en los que no se puede acceder a los datos de las APIs. Por ejemplo, puedes ocultar una lista de archivos guardados recientemente cuando el usuario no otorgó acceso a Drive.
Solo debes solicitar permisos adicionales que necesites para acceder a las APIs de Google cuando el usuario realice una acción que requiera acceso a una API en particular. Por ejemplo, puedes solicitar permiso para acceder al Drive del usuario solo cuando este presione el botón "Guardar en Drive" por primera vez.
Con esta técnica, puedes evitar abrumar a los usuarios nuevos o confundirlos sobre por qué se les solicitan ciertos permisos.
Solicita los permisos que requieren las acciones del usuario
Cada vez que un usuario realice una acción que requiera un alcance que no se solicitó durante el acceso, llama a GoogleSignIn.hasPermissions para verificar si el usuario ya otorgó los permisos necesarios. De lo contrario, llama a GoogleSignIn.requestPermissions para iniciar una actividad que solicite los permisos adicionales requeridos al usuario.
Por ejemplo, si un usuario realiza una acción que requiere acceso al almacenamiento de la app de Drive, haz lo siguiente:
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();
}
En la devolución de llamada onActivityResult de tu actividad, puedes verificar si se adquirieron los permisos necesarios correctamente y, si es así, llevar a cabo la acción del usuario.
@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();
}
}
}
También puedes pasar un GoogleSignInOptionsExtension a hasPermissions y requestPermissions para verificar y adquirir un conjunto de permisos de forma más conveniente.