Einige Google-Dienste wie Drive, Gmail und viele andere bieten öffentliche APIs, mit denen Sie Apps erstellen können, die Nutzern die Arbeit mit ihren Daten in diesen Diensten erleichtern. Für den Zugriff auf diese Dienste müssen Apps einen der OAuth 2.0-Clientabläufe implementieren, um die Einwilligung der Nutzer einzuholen und Zugriffstokens zu erhalten, die den Zugriff auf die APIs ermöglichen.
Sie können die Google Log-in-Bibliothek verwenden, die den OAuth 2.0-Vorgang für Sie implementiert, um Zugriffstokens für den angemeldeten Nutzer abzurufen.
Vorbereitung
Bevor Ihre iOS-App Google APIs aufrufen kann, müssen Sie die folgenden Einrichtungsschritte ausführen:
1. Die APIs für Ihr Projekt aktivieren
Für jede Anwendung, die Google APIs aufruft, müssen diese APIs in der Google Cloud Console aktiviert werden.
So aktivieren Sie eine API für Ihr Projekt:
- Öffnen Sie die API-Bibliothek in der Google Cloud Console.
- Wählen Sie ein Projekt aus oder erstellen Sie ein neues, wenn Sie dazu aufgefordert werden.
- Wählen Sie die gewünschte API aus und klicken Sie dann auf Aktivieren.
2. Anmeldedaten für die Autorisierung erstellen
Jede iOS-Anwendung, die OAuth 2.0 für den Zugriff auf Google APIs verwendet, muss über Autorisierungsdaten verfügen, mit denen sie sich gegenüber dem Google-Autorisierungsserver identifiziert. In den folgenden Schritten wird erläutert, wie Sie Anmeldedaten für Ihr Projekt erstellen:
- Rufen Sie in der Google Cloud Console die Seite Anmeldedaten auf.
- Klicken Sie auf Client erstellen (oder Anmeldedaten erstellen > OAuth-Client-ID).
- Wählen Sie den Anwendungstyp iOS aus.
- Geben Sie einen Namen für den OAuth-Client ein. Dieser Name identifiziert den Client auf der Seite „Anmeldedaten“ Ihres Projekts.
- Geben Sie den Paket-Identifikator für Ihre App ein. Die Paket-ID ist der Wert des Schlüssels
CFBundleIdentifierin derInfo.plistIhrer App. Der Wert wird normalerweise im Bereich „Allgemein“ oder „Signierung und Funktionen“ des Xcode-Projekt-Editors oder auf der Seite „App-Informationen“ in Apple App Store Connect angezeigt. Achten Sie darauf, dass Sie die richtige Paket-ID verwenden, da sie nicht geändert werden kann, wenn Sie App Check verwenden. - (Optional) Geben Sie die App Store-ID Ihrer App ein, wenn die App im Apple App Store veröffentlicht wurde. Die Store-ID ist ein numerischer String, der in jeder Apple App Store-URL enthalten ist.
- Optional: Geben Sie Ihre Team-ID ein. Weitere Informationen finden Sie in der Dokumentation zum Apple-Entwicklerkonto unter Team-ID ermitteln. Die Team-ID ist erforderlich, wenn Sie App Check für Ihren Client aktivieren.
- (Optional) Aktivieren Sie App Check für Ihre iOS-App. Wenn Sie App Check aktivieren, wird der App Attest-Dienst von Apple verwendet, um zu prüfen, ob OAuth 2.0-Anfragen, die von Ihrem OAuth-Client stammen, echt sind und von Ihrer App stammen. So wird das Risiko von App-Imitaten verringert.
- Klicken Sie auf Erstellen.
Ihre Client-ID wird generiert und in der Google Cloud Console angezeigt. Fügen Sie das umgekehrte URL-Schema der Client-ID (z. B. com.googleusercontent.apps.1234567890-abcdef) zur Info.plist Ihrer App hinzu, um Autorisierungsweiterleitungen zu verarbeiten.
3. Grundlegende Integration von Google Log-in abschließen
Führen Sie die grundlegende Integration von Google Log-in durch, bevor Sie inkrementelle Bereiche anfordern und Google APIs aufrufen.
1. Prüfen, welche Bereiche gewährt wurden
Bevor Sie eine Google API aufrufen, prüfen Sie mit dem Attribut grantedScopes von GIDGoogleUser, welche Bereiche Ihrer App bereits gewährt wurden:
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
}
Je nachdem, ob ein bestimmter Bereich vom Nutzer gewährt wurde, müssen Sie möglicherweise eine Anfrage für einen zusätzlichen Bereich stellen, um eine bestimmte Interaktion zu unterstützen.
2. Zusätzliche Bereiche anfordern
Wenn Sie zusätzliche Bereiche anfordern müssen, rufen Sie addScopes:presentingViewController:completion oder addScopes:presentingWindow:completion auf, um den Nutzer zu bitten, Ihrer App zusätzlichen Zugriff zu gewähren.
So fordern Sie beispielsweise Lesezugriff auf die Drive-Dateien eines Nutzers an:
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. API-Aufruf mit neuen Tokens ausführen
Damit Ihre Google API-Aufrufe immer mit gültigen Zugriffstokens versehen sind, binden Sie die Aufrufe in einen refreshTokensIfNeededWithCompletion:-Block ein:
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];
}];
Verwenden Sie das Zugriffstoken, um die API aufzurufen. Fügen Sie dazu das Zugriffstoken in den Header einer REST- oder gRPC-Anfrage (Authorization: Bearer ACCESS_TOKEN) ein oder verwenden Sie den Fetcher-Autorisierer mit der Google APIs-Clientbibliothek.