Accede a las API de Google en una app para iOS

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Algunos servicios de Google, como Drive, Gmail y muchos otros, proporcionan API públicas que puedes usar para crear apps que ayuden a los usuarios a trabajar con sus datos en estos servicios. Para acceder a estos servicios, las aplicaciones deben implementar uno de los flujos de cliente de OAuth 2.0 a fin de obtener el consentimiento de los usuarios y obtener tokens de acceso, que otorgan acceso a las API.

Puedes usar la biblioteca de Acceso con Google, que implementa el flujo de OAuth 2.0 por ti, a fin de obtener tokens de acceso para el usuario que accedió.

Antes de comenzar

Debes completar la integración básica de Acceso con Google.

1. Verifica qué alcances se otorgaron

Antes de realizar una llamada a una API de Google, verifica qué alcances ya se otorgaron a la app con la propiedad grantedScopes de GIDGoogleUser:

Swift

let driveScope = "https://www.googleapis.com/auth/drive.readonly"
let grantedScopes = user.grantedScopes
if grantedScopes == nil || !grantedScopes!.contains(driveScope) {
  // Request additional Drive scope.
}

Objective‑C

NSString *driveScope = @"https://www.googleapis.com/auth/drive.readonly";

// Check if the user has granted the Drive scope
if (![user.grantedScopes containsObject:driveScope]) {
  // request additional drive scope
}

En función de si el usuario otorgó un permiso determinado, es posible que debas solicitar un alcance adicional para admitir una interacción en particular.

2. Solicitar permisos adicionales

Si necesitas solicitar alcances adicionales, llama a addScopes:presentingViewController:callback o addScopes:presentingWindow:callback para pedirle al usuario que le otorgue acceso adicional a la app.

Por ejemplo, para solicitar acceso de solo lectura a la unidad de Drive de un usuario:

Swift

let additionalScopes = ["https://www.googleapis.com/auth/drive.readonly"]
GIDSignIn.sharedInstance.addScopes(additionalScopes, presenting: self) { user, error in
    guard error == nil else { return }
    guard let user = user else { return }

    // Check if the user granted access to the scopes you requested.
}

Objective‑C

NSArray *additionalScopes = @[ @"https://www.googleapis.com/auth/drive.readonly" ];
[GIDSignIn.sharedInstance addScopes:additionalScopes
           presentingViewController:self
                           callback:^(GIDGoogleUser * _Nullable user,
                                      NSError * _Nullable error) {
    if (error) { return; }
    if (user == nil) { return; }

    // Check if the user granted access to the scopes you requested.
}];

3. Realiza una llamada a la API con tokens nuevos

Para asegurarte de que las llamadas a la API de Google siempre tengan tokens de acceso sin vencer adjuntos, une las llamadas en un bloque doWithFreshTokens::

Swift

user.authentication.do { authentication, error in
    guard error == nil else { return }
    guard let authentication = authentication else { return }

    // Get the access token to attach it to a REST or gRPC request.
    let accessToken = authentication.accessToken

    // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
    // use with GTMAppAuth and the Google APIs client library.
    let authorizer = authentication.fetcherAuthorizer()
}

Objective‑C

[user.authentication doWithFreshTokens:^(GIDAuthentication * _Nullable authentication,
                                         NSError * _Nullable error) {
    if (error) { return; }
    if (authentication == nil) { return; }

    // Get the access token to attach it to a REST or gRPC request.
    NSString *accessToken = authentication.accessToken;

    // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
    // use with GTMAppAuth and the Google APIs client library.
    id<GTMFetcherAuthorizationProtocol> authorizer = [authentication fetcherAuthorizer];
}];

Usa el token de acceso a fin de llamar a la API, ya sea mediante la inclusión del token de acceso en el encabezado de una solicitud de REST o gRPC (Authorization: Bearer ACCESS_TOKEN), o mediante el autorizador de recuperación con la biblioteca cliente de las API de Google.