Para obtener la mejor experiencia del usuario, debes solicitar la menor cantidad de alcances posible cuando los usuarios accedan inicialmente. Si la funcionalidad principal de la 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 los datos de la API de Google, pero no son necesarias como parte de su funcionalidad principal, debes diseñarla para que pueda manejar correctamente los casos en los que no se pueda acceder a los datos de la API. Por ejemplo, puedes ocultar una lista de archivos guardados recientemente cuando el usuario no le otorgó acceso a Drive.
Debes solicitar permisos adicionales que necesites para acceder a las API de Google solo cuando el usuario realice una acción que requiera acceso a una API en particular. Por ejemplo, puedes solicitar permiso para acceder a la unidad de Drive del usuario solo cuando el usuario presiona el botón "Guardar en Drive" por primera vez.
Si usas esta técnica, puedes evitar abrumar a los usuarios nuevos o confundir a los usuarios con respecto a por qué se les solicitan ciertos permisos.
Cómo solicitar los permisos que requieren las acciones del usuario
Cuando un usuario realice una acción que requiera un permiso que no se solicitó durante el acceso, llama a GoogleSignIn.hasPermissions
para verificar si ya otorgó los permisos necesarios. De lo contrario, llama a GoogleSignIn.requestPermissions
para iniciar una actividad que solicite los permisos adicionales necesarios al usuario.
Por ejemplo, si un usuario realiza una acción que requiere acceso al almacenamiento de tu 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 los permisos necesarios se adquirieron de forma correcta y, si es así, realizar 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 buscar y adquirir un conjunto de permisos de manera más conveniente.