Mit einer iOS-App auf Google APIs zugreifen

Einige Google-Dienste wie Drive, Gmail und viele andere bieten öffentliche APIs an, mit denen Sie Anwendungen erstellen können, die Nutzern die Arbeit mit ihren Daten in diesen Diensten erleichtern. Für den Zugriff auf diese Dienste müssen Anwendungen einen der OAuth 2.0-Clientabläufe implementieren, um die Einwilligung der Nutzer einzuholen und Zugriffstokens abzurufen, die Zugriff auf die APIs gewähren.

Du kannst die Google Log-in-Bibliothek verwenden, die den OAuth 2.0-Vorgang für dich implementiert, um Zugriffstokens für den angemeldeten Nutzer zu erhalten.

Hinweis

Du musst die grundlegende Google Log-in-Integration durchführen.

1. Prüfen, welche Bereiche gewährt wurden

Prüfen Sie vor dem Aufruf einer Google API, welche Bereiche Ihrer Anwendung bereits gewährt wurden. Verwenden Sie dazu das Attribut grantedScopes von 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
}

Je nachdem, ob der Nutzer einen bestimmten Bereich gewährt hat oder nicht, müssen Sie möglicherweise einen zusätzlichen Bereich anfordern, 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 aufzufordern, Ihrer Anwendung 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 an Ihre Google API-Aufrufe immer unbefristete Zugriffstokens angehängt sind, verpacken Sie die Aufrufe in einen refreshTokensIfNeededWithCompletion:-Block:

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. Dazu nehmen Sie das Zugriffstoken in den Header einer REST- oder gRPC-Anfrage (Authorization: Bearer ACCESS_TOKEN) auf oder verwenden den Autorisierenden des Abrufs mit der Google APIs-Clientbibliothek.