我尝试使用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);
}
}];
}
答案 0 :(得分:0)
我无法找到直接修复,但你可以这样做:
通过以下方式从GTMOAuth2Authentication
对象获取访问令牌:
auth.accessToken
然后在您要发出请求的位置设置访问令牌。 要刷新令牌,请使用以下方法:
[auth
authorizeRequest:nil // just to refresh
completionHandler:^(NSError *error) {
// your code here
}];