In einer iOS-App auf Google APIs zugreifen

Einige Google-Dienste wie Drive, Gmail und viele andere bieten öffentliche APIs, mit denen Sie Apps erstellen können, mit denen Nutzer in diesen Diensten mit ihren Daten arbeiten können. Um auf diese Dienste zugreifen zu können, müssen Apps einen der OAuth 2.0-Client-Flows implementieren, um die Zustimmung der Benutzer einzuholen und Zugriffstoken zu erhalten, die Zugriff auf die APIs gewähren.

Sie können die Google-Anmeldebibliothek verwenden, die den OAuth 2.0-Ablauf für Sie implementiert, um Zugriffstoken für den angemeldeten Nutzer abzurufen.

Bevor Sie beginnen

Sie müssen die grundlegende Integration der Google-Anmeldung abschließen .

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

Bevor Sie einen Anruf an einen Google - API machen, prüfen Sie, welche Bereiche bereits zu Ihrer App erteilt wurde, die Verwendung von grantedScopes Eigenschaft GIDGoogleUser :

Schnell

let driveScope = "https://www.googleapis.com/auth/drive.readonly"
let grantedScopes = user.grantedScopes
if grantedScopes == nil || !grantedScopes!.contains(driveScope) {
  // Request additional Drive scope.
}

Ziel 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 Benutzer 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:callback; um den Benutzer aufzufordern, Ihrer App zusätzlichen Zugriff zu gewähren.

So fordern Sie beispielsweise schreibgeschützten Zugriff auf das Drive eines Nutzers an:

Schnell

let additionalScopes = ["https://www.googleapis.com/auth/drive.readonly"]
GIDSignIn.sharedInstance.addScopes(additionalScopes, presenting: self) { user, error in
    guard error == nil else { return }
    guard let user = user else { return }

    // Check if the user granted access to the scopes you requested.
}

Ziel c

NSArray *additionalScopes = @[ @"https://www.googleapis.com/auth/drive.readonly" ];
[GIDSignIn.sharedInstance addScopes:additionalScopes
           presentingViewController:self
                           callback:^(GIDGoogleUser * _Nullable user,
                                      NSError * _Nullable error) {
    if (error) { return; }
    if (user == nil) { return; }

    // Check if the user granted access to the scopes you requested.
}];

3. Machen Sie einen API-Aufruf mit frischen Token

Um sicherzustellen, dass an Ihre Google API-Aufrufe immer nicht abgelaufene Zugriffstoken angehängt sind, doWithFreshTokens: die Aufrufe in einen doWithFreshTokens: -Block:

Schnell

user.authentication.do { authentication, error in
    guard error == nil else { return }
    guard let authentication = authentication else { return }

    // Get the access token to attach it to a REST or gRPC request.
    let accessToken = authentication.accessToken

    // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
    // use with GTMAppAuth and the Google APIs client library.
    let authorizer = authentication.fetcherAuthorizer()
}

Ziel c

[user.authentication doWithFreshTokens:^(GIDAuthentication * _Nullable authentication,
                                         NSError * _Nullable error) {
    if (error) { return; }
    if (authentication == nil) { return; }

    // Get the access token to attach it to a REST or gRPC request.
    NSString *accessToken = authentication.accessToken;

    // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
    // use with GTMAppAuth and the Google APIs client library.
    id<GTMFetcherAuthorizationProtocol> authorizer = [authentication fetcherAuthorizer];
}];

Verwenden Sie das Zugriffstoken, um die API aufzurufen, indem Sie das Zugriffstoken entweder in den Header einer REST- oder gRPC-Anfrage Authorization: Bearer ACCESS_TOKEN ( Authorization: Bearer ACCESS_TOKEN ) oder indem Sie den Abrufautorisierer mit der Google APIs- Clientbibliothek verwenden.