Niektóre usługi Google, takie jak Dysk, Gmail i wiele innych, udostępniają publiczne interfejsy API, których możesz używać do tworzenia aplikacji ułatwiających użytkownikom pracę z danymi w tych usługach. Aby uzyskać dostęp do tych usług, aplikacje muszą wdrożyć jeden z przepływów klienta OAuth 2.0, aby uzyskać zgodę użytkowników i tokeny dostępu, które umożliwiają dostęp do interfejsów API.
Możesz użyć biblioteki Logowania przez Google, która implementuje przepływ OAuth 2.0, aby uzyskać tokeny dostępu dla zalogowanego użytkownika.
Wymagania wstępne
Zanim aplikacja na iOS będzie mogła wywoływać interfejsy API Google, wykonaj te czynności konfiguracyjne:
1. Włączanie interfejsów API w projekcie
Każda aplikacja, która wywołuje interfejsy API Google, musi je włączyć w konsoli Google Cloud.
Aby włączyć interfejs API w projekcie:
- Otwórz Bibliotekę interfejsów API w konsoli Google Cloud.
- Jeśli pojawi się taka prośba, wybierz projekt lub utwórz nowy.
- Wybierz interfejs API, który chcesz włączyć, a następnie kliknij Włącz.
2. Tworzenie danych uwierzytelniających
Każda aplikacja na iOS, która używa protokołu OAuth 2.0 do uzyskiwania dostępu do interfejsów API Google, musi mieć dane logowania autoryzacji, które identyfikują aplikację na serwerze autoryzacji Google. Aby utworzyć dane logowania do projektu:
- W konsoli Google Cloud otwórz stronę Dane logowania.
- Kliknij Utwórz klienta (lub Utwórz dane logowania > Identyfikator klienta OAuth).
- Wybierz typ aplikacji iOS.
- Wpisz nazwę klienta OAuth. Ta nazwa identyfikuje klienta na stronie Dane logowania w projekcie.
- Wpisz identyfikator pakietu aplikacji. Identyfikator pakietu to wartość klucza
CFBundleIdentifierw plikuInfo.plistaplikacji. Wartość jest zwykle wyświetlana w panelu Ogólne lub Podpisywanie i funkcje w edytorze projektu Xcode albo na stronie Informacje o aplikacji w Apple App Store Connect. Sprawdź, czy używasz prawidłowego identyfikatora pakietu, ponieważ nie można go zmienić, jeśli używasz funkcji Sprawdzanie aplikacji. - (Opcjonalnie) Wpisz identyfikator aplikacji w sklepie z aplikacjami, jeśli aplikacja jest opublikowana w Apple App Store. Identyfikator sklepu to ciąg liczbowy zawarty w każdym adresie URL Apple App Store.
- (Opcjonalnie) Wpisz identyfikator zespołu. Zobacz Znajdowanie identyfikatora zespołu w dokumentacji konta dewelopera Apple. Identyfikator zespołu jest wymagany, jeśli włączysz Sprawdzanie aplikacji dla klienta.
- (Opcjonalnie) Włącz Sprawdzanie aplikacji w aplikacji na iOS. Gdy włączysz Sprawdzanie aplikacji, usługa App Attest firmy Apple będzie używana do weryfikowania, czy żądania OAuth 2.0 pochodzące od klienta OAuth są autentyczne i pochodzą z Twojej aplikacji. Pomoże to zmniejszyć ryzyko podszywania się pod aplikację.
- Kliknij Utwórz.
Identyfikator klienta zostanie wygenerowany i wyświetlony w konsoli Google Cloud. Dodaj odwrócony schemat URI adresu URL identyfikatora klienta (np. com.googleusercontent.apps.1234567890-abcdef) do pliku Info.plist aplikacji, aby obsługiwać przekierowania autoryzacji.
3. Zakończ podstawową integrację z Logowaniem przez Google
Zanim poprosisz o dodatkowe zakresy i wywołasz interfejsy API Google, przeprowadź podstawową integrację z Logowaniem przez Google.
1. Sprawdzanie, które zakresy zostały przyznane
Zanim wywołasz interfejs API Google, sprawdź, które zakresy zostały już przyznane Twojej aplikacji, używając właściwości grantedScopes obiektu 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że być konieczne wysłanie żądania o dodatkowy zakres, aby umożliwić konkretną interakcję.
2. Prośba o dodatkowe zakresy
Jeśli chcesz poprosić o dodatkowe zakresy, wywołaj 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 na Dysku użytkownika:
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ływanie interfejsu API z nowymi tokenami
Aby mieć pewność, że wywołania interfejsu API Google zawsze mają dołączone aktualne tokeny dostępu, umieść wywołania 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, aby wywołać interfejs API, dołączając token dostępu do nagłówka żądania REST lub gRPC (Authorization: Bearer ACCESS_TOKEN) albo używając autoryzatora pobierającego z biblioteką klienta interfejsów API Google.