Acceda a las API de Google en una aplicación de iOS

Algunos servicios de Google, como Drive, Gmail y muchos otros, proporcionan API públicas que puede utilizar para crear aplicaciones 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 para obtener el consentimiento de los usuarios y obtener tokens de acceso , que otorgan acceso a las API.

Puede usar la biblioteca de inicio de sesión de Google, que implementa el flujo de OAuth 2.0 para usted, para obtener tokens de acceso para el usuario que inició sesión.

Antes de que empieces

Debe completar la integración básica de inicio de sesión de Google .

1. Compruebe qué alcances se han concedido

Antes de realizar una llamada a una API de Google, compruebe qué ámbitos ya se han concedido a su aplicación, utilizando el grantedScopes propiedad de GIDGoogleUser :

Rápido

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

C objetivo

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 ha otorgado o no un determinado alcance, es posible que deba realizar una solicitud de un alcance adicional para admitir una interacción en particular.

2. Solicite ámbitos adicionales

Si necesita solicitar ámbitos adicionales, llame a addScopes:presentingViewController:callback; para pedirle al usuario que le otorgue acceso adicional a su aplicación.

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

Rápido

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.
}

C objetivo

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.Realice una llamada a la API con tokens nuevos

Para asegurarse de que sus llamadas a la API de Google siempre tengan tokens de acceso no vencidos adjuntos, envuelva las llamadas en un bloque doWithFreshTokens: :

Rápido

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()
}

C objetivo

[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];
}];

Use el token de acceso para llamar a la API, ya sea incluyendo el token de acceso en el encabezado de una solicitud REST o gRPC ( Authorization: Bearer ACCESS_TOKEN ), o usando el autorizador de búsqueda con la Biblioteca de cliente de API de Google .