GTMOAuth2Authentication не работает
Я пытаюсь использовать API Google OAuth2 и YouTube. OAuth возвращается GTMOAuth2Authentication
объект, который вы затем используете для отправки запросов на такие сервисы, как YouTube. Мой логин работает нормально, и когда я вручную передаю объект аутентификации, я могу делать запросы.
Тем не менее, я также должен иметь возможность доступа к объекту аутентификации через цепочку для ключей, и я получаю действительный объект, но если я пытаюсь использовать его для отправки запросов, я не могу. Я продолжаю получать следующую ошибку: "Операция не может быть завершена. (Com.google.GTMHTTPFetcher error -1.)" Я был бы признателен, если бы кто-то мог указать на мою ошибку. Я тестирую на реальном iPhone 5s.
Код аутентификации:
GTMOAuth2ViewControllerTouch * viewController = [[GTMOAuth2ViewControllerTouch alloc]
initWithScope:scope
clientID:kGoogleClientID
clientSecret:kGoogleClientSecret
keychainItemName:kGoogleKeychainItemName
delegate:self
finishedSelector:@selector(viewController:
finishedWithAuth:
error:)];
[self.navigationController pushViewController:viewController animated:YES];
Обработчик завершения аутентификации:
- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
finishedWithAuth:(GTMOAuth2Authentication *)auth
error:(NSError *)error {
NSLog(@"%s", __PRETTY_FUNCTION__);
if (error != nil) {
NSLog(@"%s %@", __PRETTY_FUNCTION__, error.localizedDescription);
return;
}
MediaGETWrapper *getWrapper = [MediaGETWrapper sharedWrapper];
getWrapper.googleAuth = auth; // passing auth directly without keychain
[getWrapper youTubeSubscriptionsWithSuccess:nil failure:nil];
Инициализация клиента YouTube:
self.youTube = [GTLServiceYouTube new];
GTMOAuth2Authentication *auth = [GTMOAuth2Authentication new];
[GTMOAuth2ViewControllerTouch
authorizeFromKeychainForName:kGoogleKeychainItemName
authentication:auth
error:nil];
self.youTube.authorizer = auth;
Запрос:
- (void)youTubeSubscriptionsWithSuccess:(void(^)(NSArray *subscriptions))success
failure:(void(^)(NSError *error))error {
NSLog(@"%s", __PRETTY_FUNCTION__);
// self.youTube.authorizer = self.googleAuth; // If uncommented, works!
GTLQueryYouTube *query = [GTLQueryYouTube queryForSubscriptionsListWithPart:@"snippet"];
query.mine = YES;
[self.youTube
executeQuery:query
completionHandler:^(GTLServiceTicket *ticket,
GTLYouTubeChannelListResponse *channelList,
NSError *error) {
if (error != nil) {
NSLog(@"%s %@", __PRETTY_FUNCTION__, error.localizedDescription); // fails here
return;
}
for (GTLYouTubeSubscription *channel in channelList) {
NSLog(@"%@", channel.snippet.title);
}
}];
}
1 ответ
Я не мог найти прямое решение, но вы можете сделать это:
Получить токен доступа от GTMOAuth2Authentication
объект через:
auth.accessToken
Затем установите токен доступа там, где вы хотите делать запросы. Чтобы обновить токен, используйте этот метод:
[auth
authorizeRequest:nil // just to refresh
completionHandler:^(NSError *error) {
// your code here
}];