Important: Depuis le 1er mai 2024, Apple exige des fichiers manifestes et des signatures de confidentialité pour les applications iOS qui utilisent des SDK courants, y compris GoogleSignIn-iOS. Passez à GoogleSignIn-iOS 7.1.0 (ou version ultérieure) avant le 1er mai 2024. Suivez notre guide de mise à jour.
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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 à exploiter leurs données dans ces
services. Pour accéder à ces services, les applications doivent implémenter l'un des
aux flux clients pour obtenir le consentement des utilisateurs et obtenir des jetons d'accès
l'accès aux API.
Vous pouvez utiliser la bibliothèque Google Sign-In, qui implémente le flux OAuth 2.0 pour
afin d'obtenir des jetons d'accès pour l'utilisateur connecté.
Avant d'appeler une API Google, vérifiez les habilitations qui ont déjà été
accordé à votre application, à l'aide de la propriété grantedScopes de GIDGoogleUser:
NSString*driveScope=@"https://www.googleapis.com/auth/drive.readonly";// Check if the user has granted the Drive scopeif(![user.grantedScopescontainsObject:driveScope]){// request additional drive scope}
Selon que l'utilisateur a accordé ou non un certain niveau d'accès, vous pouvez
ont besoin d'un champ d'application supplémentaire afin de prendre en charge
d'interaction.
2. Demander des niveaux d'accès supplémentaires
Si vous devez demander des niveaux d'accès 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
letadditionalScopes=["https://www.googleapis.com/auth/drive.readonly"]guardletcurrentUser=GIDSignIn.sharedInstance.currentUserelse{return;/* Not signed in. */}currentUser.addScopes(additionalScopes,presenting:self){signInResult,erroringuarderror==nilelse{return}guardletsignInResult=signInResultelse{return}// Check if the user granted access to the scopes you requested.}
Objective-C
NSArray*additionalScopes=@[@"https://www.googleapis.com/auth/drive.readonly"];GIDGoogleUser*currentUser=GIDSignIn.sharedInstance.currentUser;[currentUseraddScopes:additionalScopespresentingViewController:selfcompletion:^(GIDSignInResult*_NullablesignInResult,NSError*_Nullableerror){if(error){return;}if(signInResult==nil){return;}// Check if the user granted access to the scopes you requested.}];
3. Effectuer un appel d'API avec de nouveaux jetons
Pour garantir que vos appels d'API Google comportent toujours des jetons d'accès en cours de validité
encapsulez les appels dans un bloc refreshTokensIfNeededWithCompletion::
Swift
currentUser.refreshTokensIfNeeded{user,erroringuarderror==nilelse{return}guardletuser=userelse{return}// Get the access token to attach it to a REST or gRPC request.letaccessToken=user.accessToken.tokenString// Or, get an object that conforms to GTMFetcherAuthorizationProtocol for// use with GTMAppAuth and the Google APIs client library.letauthorizer=user.fetcherAuthorizer()}
Objective-C
[currentUserrefreshTokensIfNeededWithCompletion:^(GIDGoogleUser*_Nullableuser,NSError*_Nullableerror){if(error){return;}if(user==nil){return;}// Get the access token to attach it to a REST or gRPC request.NSString*accessToken=user.accessToken.tokenString;// Or, get an object that conforms to GTMFetcherAuthorizationProtocol for// use with GTMAppAuth and the Google APIs client library.id<GTMFetcherAuthorizationProtocol>authorizer=[userfetcherAuthorizer];}];
Utilisez le jeton d'accès pour appeler l'API, soit en incluant le jeton d'accès dans
l'en-tête d'une requête REST ou gRPC (Authorization: Bearer ACCESS_TOKEN) ;
ou en utilisant l'agent d'autorisation d'extraction
Bibliothèque cliente des API Google.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/25 (UTC)."],[[["\u003cp\u003eGoogle services like Drive and Gmail offer public APIs for building apps that interact with user data, requiring OAuth 2.0 for user consent and access tokens.\u003c/p\u003e\n"],["\u003cp\u003eBefore making API calls, verify granted scopes using \u003ccode\u003egrantedScopes\u003c/code\u003e and request additional scopes if needed with \u003ccode\u003eaddScopes\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eEnsure API calls have unexpired access tokens by wrapping them in \u003ccode\u003erefreshTokensIfNeededWithCompletion\u003c/code\u003e to refresh tokens.\u003c/p\u003e\n"],["\u003cp\u003eAccess tokens can be used directly in REST/gRPC requests or with the Google APIs Client Library for seamless integration.\u003c/p\u003e\n"],["\u003cp\u003eBasic Google Sign-In integration is a prerequisite before using these features.\u003c/p\u003e\n"]]],[],null,["# Access Google APIs in an iOS app\n\nSome Google services, such as Drive, Gmail, and many others, provide public APIs\nthat you can use to create apps that help users work with their data in these\nservices. To access these services, apps must implement one of the OAuth 2.0\nclient flows to get consent from users and obtain *access tokens*, which grant\naccess to the APIs.\n\nYou can use the Google Sign-In library, which implements the OAuth 2.0 flow for\nyou, to get access tokens for the signed-in user.\n\nBefore you begin\n----------------\n\nYou must complete the [basic Google Sign-In integration](/identity/sign-in/ios/sign-in).\n\n1. Check which scopes have been granted\n---------------------------------------\n\nBefore you make a call to a Google API, check which scopes have already been\ngranted to your app, using the `grantedScopes` property of `GIDGoogleUser`: \n\n### Swift\n\n let driveScope = \"https://www.googleapis.com/auth/drive.readonly\"\n let grantedScopes = user.grantedScopes\n if grantedScopes == nil || !grantedScopes!.contains(driveScope) {\n // Request additional Drive scope.\n }\n\n### Objective-C\n\n NSString *driveScope = @\"https://www.googleapis.com/auth/drive.readonly\";\n\n // Check if the user has granted the Drive scope\n if (![user.grantedScopes containsObject:driveScope]) {\n // request additional drive scope\n }\n\nBased on whether or not a certain scope has been granted by the user, you might\nneed to make a request for an additional scope in order to support a particular\ninteraction.\n\n2. Request additional scopes\n----------------------------\n\nIf you need to request additional scopes, call\n`addScopes:presentingViewController:completion` or\n`addScopes:presentingWindow:completion` to ask the user to grant your app\nadditional access.\n\nFor example, to request read-only access to a user's Drive files: \n\n### Swift\n\n let additionalScopes = [\"https://www.googleapis.com/auth/drive.readonly\"]\n guard let currentUser = GIDSignIn.sharedInstance.currentUser else {\n return ; /* Not signed in. */\n }\n\n currentUser.addScopes(additionalScopes, presenting: self) { signInResult, error in\n guard error == nil else { return }\n guard let signInResult = signInResult else { return }\n\n // Check if the user granted access to the scopes you requested.\n }\n\n### Objective-C\n\n NSArray *additionalScopes = @[ @\"https://www.googleapis.com/auth/drive.readonly\" ];\n GIDGoogleUser *currentUser = GIDSignIn.sharedInstance.currentUser;\n\n [currentUser addScopes:additionalScopes\n presentingViewController:self\n completion:^(GIDSignInResult * _Nullable signInResult,\n NSError * _Nullable error) {\n if (error) { return; }\n if (signInResult == nil) { return; }\n\n // Check if the user granted access to the scopes you requested.\n }];\n\n3. Make an API call with fresh tokens\n-------------------------------------\n\nTo ensure that your Google API calls always have unexpired access tokens\nattached, wrap the calls in a `refreshTokensIfNeededWithCompletion:` block: \n\n### Swift\n\n currentUser.refreshTokensIfNeeded { user, error in\n guard error == nil else { return }\n guard let user = user else { return }\n\n // Get the access token to attach it to a REST or gRPC request.\n let accessToken = user.accessToken.tokenString\n\n // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for\n // use with GTMAppAuth and the Google APIs client library.\n let authorizer = user.fetcherAuthorizer()\n }\n\n### Objective-C\n\n [currentUser refreshTokensIfNeededWithCompletion:^(\n GIDGoogleUser * _Nullable user,\n NSError * _Nullable error) {\n if (error) { return; }\n if (user == nil) { return; }\n\n // Get the access token to attach it to a REST or gRPC request.\n NSString *accessToken = user.accessToken.tokenString;\n\n // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for\n // use with GTMAppAuth and the Google APIs client library.\n id\u003cGTMFetcherAuthorizationProtocol\u003e authorizer = [user fetcherAuthorizer];\n }];\n\nUse the access token to call the API, by either including the access token in\nthe header of a REST or gRPC request (`Authorization: Bearer `\u003cvar translate=\"no\"\u003eACCESS_TOKEN\u003c/var\u003e),\nor by using the fetcher authorizer with the\n[Google APIs Client Library](https://github.com/google/google-api-objectivec-client-for-rest/)."]]