0

我正在尝试使用 Google 的 OAuth2 和 YouTube API。OAuth 返回GTMOAuth2Authentication对象,然后您可以使用该对象向 YouTube 等服务发出请求。我的登录工作正常,当我手动通过身份验证对象时,我可以发出请求。

但是,我也应该能够通过钥匙串访问身份验证对象,并且我收到了一个有效的对象,但是如果我尝试使用它来发出请求,我就不能。我不断收到以下错误:“操作无法完成。(com.google.GTMHTTPFetcher 错误 -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);
        }
     }];
}
4

1 回答 1

0

我找不到直接的修复方法,但你可以这样做:

GTMOAuth2Authentication通过以下方式从对象获取访问令牌:

auth.accessToken

然后在要发出请求的任何地方设置访问令牌。要刷新令牌,请使用以下方法:

[auth 
 authorizeRequest:nil // just to refresh
 completionHandler:^(NSError *error) {
     // your code here
 }];
于 2015-03-10T03:41:16.183 回答