Cómo solicitar alcances adicionales

Para brindar la mejor experiencia del usuario, debes solicitar la menor cantidad de permisos posible cuando los usuarios acceden por primera vez. Si la funcionalidad principal de tu app no está vinculada a un servicio de Google, a menudo, solo necesitas la configuración de GoogleSignInOptions.DEFAULT_SIGN_IN para acceder.

Si tu app tiene funciones que pueden usar 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 APIs de Google solo cuando el usuario realiza una acción que requiere acceso a una API en particular. Por ejemplo, puedes solicitar permiso para acceder a la unidad de Drive del usuario solo cuando este 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 por el motivo por el que 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 alcance que no se solicita 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 al usuario los permisos adicionales requeridos.

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 correctamente los permisos necesarios y, de ser 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 un conjunto de permisos y adquirirlo de manera más conveniente.