Dostęp do interfejsów API Google w aplikacji na iOS

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.