Saltar al contenido principal

Google APIs

Cómo usar las API de Google con Flutter.

El paquete de API de Google expone docenas de servicios de Google que puedes usar desde proyectos Dart.

Esta página describe cómo utilizar las API que interactúan con los datos del usuario final mediante la autenticación de Google.

Algunos ejemplos de API de datos de usuario son Calendar, Gmail, YouTube y Firebase.

Para añadir autenticación a Firebase de forma explícita, consulta el codelab Añadir un flujo de autenticación de usuario a una aplicación Flutter usando FirebaseUI y la documentación de Primeros pasos con Firebase Authentication en Flutter.

Resumen

#

Para usar las API de Google, sigue estos pasos:

  1. Elige la API deseada
  2. Habilita la API
  3. Autentica y determina el usuario actual
  4. Obtén un cliente HTTP autenticado
  5. Crea y utiliza la clase de API deseada

1. Elige la API deseada

#

La documentación de package:googleapis enumera cada API como una biblioteca Dart independiente&emdash;en un formato nombre_version. Consulta youtube_v3 como ejemplo.

Cada biblioteca puede proporcionar muchos tipos, pero hay una clase raíz que termina en Api. Para YouTube, es YouTubeApi.

No solo la clase Api es la que necesitas instanciar (ver paso 3), sino que también expone los alcances (scopes) que representan los permisos necesarios para usar la API. Por ejemplo, la sección Constants de la clase YouTubeApi enumera los alcances disponibles. Para solicitar acceso de lectura (pero no de escritura) a los datos de YouTube de un usuario final, autentica al usuario con youtubeReadonlyScope.

dart
// Provides the `YouTubeApi` class.
import 'package:googleapis/youtube/v3.dart';

2. Habilita la API

#

Para usar las API de Google debes tener una cuenta de Google y un proyecto de Google. También necesitas habilitar la API deseada.

Este ejemplo habilita la YouTube Data API v3. Para más detalles, consulta las instrucciones de inicio rápido.

3. Autentica y determina el usuario actual

#

Utiliza el paquete google_sign_in para autenticar a los usuarios con su identidad de Google. Configura el inicio de sesión para cada plataforma que desees soportar.

dart
/// Provides the `GoogleSignIn` class.
import 'package:google_sign_in/google_sign_in.dart';

Se accede a la funcionalidad del paquete a través de una instancia estática de la clase GoogleSignIn . Antes de interactuar con la instancia, se debe llamar al método initialize y permitir que se complete.

dart
final GoogleSignIn _googleSignIn = GoogleSignIn.instance;

@override
void initState() {
  super.initState();
  _googleSignIn.initialize();
  // ···
}

Una vez completada la inicialización pero antes de la autenticación del usuario, escucha los eventos de autenticación para determinar si un usuario ha iniciado sesión.

dart
GoogleSignInAccount? _currentUser;
@override
void initState() {
  super.initState();
  _googleSignIn.initialize().then((_) {
    _googleSignIn.authenticationEvents.listen((event) {
      setState(() {
        _currentUser = switch (event) {
          GoogleSignInAuthenticationEventSignIn() => event.user,
          _ => null,
        };
      });
    });
  });
}

Una vez que estés escuchando cualquier evento de autenticación relevante, puedes intentar autenticar a un usuario que haya iniciado sesión previamente.

dart
void initState() {
  super.initState();
  _googleSignIn.initialize().then((_) {
    // ...
    // Attempt to authenticate a previously signed in user.
    _googleSignIn.attemptLightweightAuthentication();
  });
}

Para permitir también la autenticación de nuevos usuarios, sigue las instrucciones proporcionadas por package:google_sign_in.

Una vez que un usuario ha sido autenticado, debes obtener un cliente HTTP autenticado.

4. Obtén un cliente HTTP autenticado

#

Una vez que tengas un usuario con sesión iniciada, solicita los tokens de autorización de cliente correspondientes utilizando authorizationForScopes para los alcances (scopes) de la API que tu aplicación requiera.

dart
const relevantScopes = [YouTubeApi.youtubeReadonlyScope];
final authorization = await currentUser.authorizationClient
    .authorizationForScopes(relevantScopes);

Una vez que tengas los tokens de autorización correspondientes, utiliza la extensión authClient de package:extension_google_sign_in_as_googleapis_auth para configurar un cliente HTTP autenticado con las credenciales correspondientes aplicadas.

dart
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
dart
final authenticatedClient = authorization!.authClient(
  scopes: relevantScopes,
);

5. Crea y utiliza la clase de API deseada

#

Utiliza la API para crear el tipo de API deseado y llamar a sus métodos. Por ejemplo:

dart
final youTubeApi = YouTubeApi(authenticatedClient);

final favorites = await youTubeApi.playlistItems.list(
  ['snippet'],
  playlistId: 'LL', // Liked List
);

Más información

#

Es posible que quieras consultar lo siguiente: