Cómo solicitar alcances adicionales

Para obtener la mejor experiencia del usuario, debes solicitar la menor cantidad de permisos posible cuando de usuarios que acceden inicialmente. Si la funcionalidad principal de tu app no está vinculada a un servicio de Google, la configuración 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 están necesaria como parte de la funcionalidad principal de tu aplicación, debes diseñarla de modo que manejar correctamente los casos en los que no se puede acceder a los datos de la API. Por ejemplo: podrías ocultar una lista de archivos guardados recientemente cuando el usuario no haya otorgado el acceso a los datos.

Debes solicitar permisos adicionales que solo necesitas para acceder a las APIs de Google Cuando el usuario realiza una acción que requiere acceso a una API determinada. Para Por ejemplo, puedes solicitar permiso para acceder a la unidad de Drive del usuario solo cuando usuario presiona un botón "Guardar en Drive" por primera vez.

Con esta técnica, puedes evitar abrumar a los usuarios nuevos o confundir y a los usuarios saber por qué se les piden ciertos permisos.

Solicitud de permisos requeridos por las acciones del usuario

Cuando un usuario realiza una acción que requiere un alcance que no se solicita en accede, llama a GoogleSignIn.hasPermissions para verificar si el usuario ya los permisos necesarios. De lo contrario, llama a GoogleSignIn.requestPermissions. para iniciar una actividad que solicite los alcances adicionales requeridos del usuario.

Por ejemplo, si un usuario realiza una acción que requiere acceso a su cuenta de Drive almacenamiento de la app, 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 requiere los permisos se hayan adquirido correctamente y, de ser así, lleve 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 más de forma conveniente.