La autenticación establece quién es una persona y, por lo general, se conoce 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 la API de Google, pero no son obligatorias como parte de sus funciones principales, 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 acceso a los permisos 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, debes solicitar permiso para acceder a Drive del usuario cada vez que este presiona 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 solicita ciertos permisos.
Para la autenticación, recomendamos usar la API de Credential Manager. Para autorizar acciones que necesiten acceso a los datos del usuario que almacena Google, te recomendamos que uses 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 un nombre, un logotipo y una 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 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. Debes 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 ahora, puedes ignorar los campos "Orígenes de JavaScript autorizados" y "URIs 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 las 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 realiza una acción que requiere un permiso adicional, llama a AuthorizationClient.authorize()
.
Por ejemplo, si un usuario realiza una acción que requiere acceso al almacenamiento de su 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 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 (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 autenticación que envíes a tu backend para intercambiar por un token de acceso y actualización.