Cómo solicitar alcances adicionales

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

Si tu app tiene funciones que pueden usar datos de la API de Google, pero no son obligatorias como parte de la funcionalidad principal de la app, debes diseñarla para que pueda controlar de forma fluida los casos en los que no se puede acceder a los datos de la API. Por ejemplo, puedes ocultar una lista de archivos guardados recientemente cuando el usuario no haya otorgado acceso a Drive.

Debes solicitar los permisos adicionales que necesitas para acceder a las APIs 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 del usuario solo cuando este presiona el botón "Guardar en Drive" por primera vez.

Si usas esta técnica, puedes evitar abrumar a usuarios nuevos o confundir a los usuarios respecto del motivo por el que se les solicitan ciertos permisos.

Cómo solicitar los permisos que requieren las acciones del usuario

Cada vez que un usuario realiza una acción que requiere 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 su 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, 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 verificar y adquirir un conjunto de permisos de manera más conveniente.