La autenticación establece quién es alguien y se conoce comúnmente como registro o acceso del usuario. La autorización es el proceso de otorgar o rechazar el acceso a los datos o recursos. Por ejemplo, tu app solicita el consentimiento del usuario para acceder a su Google Drive.
Las llamadas de autenticación y autorización deben ser dos flujos separados y distintos según las necesidades de la app.
Si tu app tiene funciones que pueden usar datos de las APIs de Google, pero no son obligatorias como parte de las funciones principales 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 acceso a los permisos que necesitas para acceder a las APIs de Google cuando el usuario realice una acción que requiera acceso a una API en particular. Por ejemplo, debes solicitar permiso para acceder al Drive del usuario cada vez que este presione el botón "Guardar en Drive".
Si separas la autorización de la autenticación, puedes evitar abrumar a los usuarios nuevos o confundirlos sobre por qué se les solicitan ciertos permisos.
Para la autenticación, recomendamos usar la API de Credential Manager. Para autorizar acciones que necesitan acceder a los datos del usuario almacenados por Google, recomendamos usar AuthorizationClient.
Configura tu proyecto
- Abre tu proyecto en o crea uno si aún no tienes uno.
- En , asegúrate de que toda la información esté completa y sea precisa.
- Asegúrate de que tu app tenga asignados el nombre, el logotipo y la página principal correctos. Estos valores se presentarán a los usuarios en la pantalla de consentimiento de Acceder con Google durante el registro y en la pantalla de Apps y servicios de terceros.
- Asegúrate de haber especificado las URLs de la política de privacidad y las condiciones del servicio de tu app.
- En , crea un ID de cliente de Android para tu app si aún no tienes uno. Deberás especificar el nombre del paquete y la firma SHA-1 de tu app.
- En , crea un nuevo ID de cliente de "Aplicación web" si aún no lo hiciste. Por el momento, puedes ignorar los campos "Orígenes de JavaScript autorizados" y "URI de redireccionamiento autorizados". Este ID de cliente se usará para identificar tu servidor de backend cuando se comunique con los servicios de autenticación de Google.
Cómo declarar dependencias
En el archivo build.gradle de tu módulo, declara dependencias con la versión más reciente de la biblioteca de Google Identity Services.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Solicita los permisos que requieren las acciones del usuario
Cada vez que un usuario realice una acción que requiera un alcance adicional, llama a AuthorizationClient.authorize()
.
Por ejemplo, si un usuario realiza una acción que requiere acceso al almacenamiento de la app de Drive, haz lo siguiente:
List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
.authorize(authorizationRequest)
.addOnSuccessListener(
authorizationResult -> {
if (authorizationResult.hasResolution()) {
// Access needs to be granted by the user
PendingIntent pendingIntent = authorizationResult.getPendingIntent();
try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
}
} else {
// Access already granted, continue with user action
saveToDriveAppFolder(authorizationResult);
}
})
.addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
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 (requestCode == MainActivity.REQUEST_AUTHORIZE) {
AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
saveToDriveAppFolder(authorizationResult);
}
}
Si accedes a las APIs de Google en el servidor, puedes llamar al método getServerAuthCode() de AuthorizationResult para obtener un código de autorización que envías a tu backend para intercambiarlo por un token de acceso y actualización.