Accéder aux API Google dans une application iOS

Certains services Google, tels que Drive, Gmail et bien d'autres, fournissent des API publiques que vous pouvez utiliser pour créer des applications qui aident les utilisateurs à travailler avec leurs données dans ces services. Pour accéder à ces services, les applications doivent implémenter l'un des flux client OAuth 2.0 afin d'obtenir le consentement des utilisateurs et d'obtenir des jetons d'accès, qui permettent d'accéder aux API.

Vous pouvez utiliser la bibliothèque Google Sign-In, qui implémente le flux OAuth 2.0 pour vous, afin d'obtenir des jetons d'accès pour l'utilisateur connecté.

Avant de commencer

Vous devez effectuer l'intégration Google Sign-In de base.

1. Vérifier les niveaux d'accès accordés

Avant d'appeler une API Google, vérifiez les champs d'application qui ont déjà été accordés à votre application à l'aide de la propriété 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
}

Selon qu'un certain champ d'application a été accordé ou non par l'utilisateur, vous devrez peut-être demander un champ d'application supplémentaire pour prendre en charge une interaction particulière.

2. Demander des niveaux d'accès supplémentaires

Si vous devez demander des autorisations supplémentaires, appelez addScopes:presentingViewController:completion ou addScopes:presentingWindow:completion pour demander à l'utilisateur d'accorder à votre application un accès supplémentaire.

Par exemple, pour demander un accès en lecture seule aux fichiers Drive d'un utilisateur :

Swift

let additionalScopes = ["https://www.googleapis.com/auth/drive.readonly"]
guard let currentUser = GIDSignIn.sharedInstance.currentUser else {
    return ;  /* Not signed in. */
}

currentUser.addScopes(additionalScopes, presenting: self) { signInResult, error in
    guard error == nil else { return }
    guard let signInResult = signInResult else { return }

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

Objective-C

NSArray