Niektóre usługi Google, takie jak Dysk czy Gmail, udostępniają publiczne interfejsy API które pozwalają tworzyć aplikacje ułatwiające użytkownikom pracę z danymi w tych usług Google. Aby uzyskać dostęp do tych usług, aplikacje muszą zaimplementować jeden z protokołów OAuth 2.0 w ramach procedur klienta, aby uzyskać zgodę użytkowników i tokeny dostępu, i dostęp do interfejsów API.
Możesz użyć biblioteki Logowania przez Google, która implementuje proces OAuth 2.0 na potrzeby aby uzyskać tokeny dostępu dla zalogowanego użytkownika.
Zanim zaczniesz
Musisz przeprowadzić podstawową integrację Logowania przez Google.
1. Sprawdzanie, które zakresy zostały przypisane
Zanim wywołasz interfejs API Google, sprawdź, które zakresy zostały już
przyznanych aplikacji za pomocą właściwości grantedScopes
elementu 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
}
W zależności od tego, czy użytkownik przyznał określony zakres, możesz mogą poprosić o dodatkowy zakres, aby objąć dany interakcji.
2. Poproś o dodatkowe zakresy
Jeśli chcesz poprosić o dodatkowe zakresy, zadzwoń do
addScopes:presentingViewController:completion
lub
addScopes:presentingWindow:completion
, aby poprosić użytkownika o przyznanie aplikacji
dodatkowego dostępu.
Aby na przykład poprosić o dostęp tylko do odczytu do plików użytkownika na Dysku:
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 *additionalScopes = @[ @"https://www.googleapis.com/auth/drive.readonly" ];
GIDGoogleUser *currentUser = GIDSignIn.sharedInstance.currentUser;
[currentUser addScopes:additionalScopes
presentingViewController:self
completion:^(GIDSignInResult * _Nullable signInResult,
NSError * _Nullable error) {
if (error) { return; }
if (signInResult == nil) { return; }
// Check if the user granted access to the scopes you requested.
}];
3. Wywołaj interfejs API z użyciem nowych tokenów
Aby wywołania interfejsu API Google zawsze miały niewygasłe tokeny dostępu
umieść połączenia w bloku refreshTokensIfNeededWithCompletion:
:
Swift
currentUser.refreshTokensIfNeeded { user, error in
guard error == nil else { return }
guard let user = user else { return }
// Get the access token to attach it to a REST or gRPC request.
let accessToken = user.accessToken.tokenString
// Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
// use with GTMAppAuth and the Google APIs client library.
let authorizer = user.fetcherAuthorizer()
}
Objective-C
[currentUser refreshTokensIfNeededWithCompletion:^(
GIDGoogleUser * _Nullable user,
NSError * _Nullable error) {
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 = [user fetcherAuthorizer];
}];
Użyj tokena dostępu do wywołania interfejsu API, umieszczając token dostępu w
nagłówek żądania REST lub gRPC (Authorization: Bearer ACCESS_TOKEN
),
lub używając modułu autoryzacyjnego modułu pobierania
Biblioteka klienta interfejsów API Google.