2013-09-03 4 views
0

Я использую следующий код для обработки интеграции Twitter в моем приложении.Не удалось проверить подпись OAuth и интеграцию с токеном twitter ios GTM-OAuth

- (IBAction)signInWithTwitter:(id)sender {  
NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/request_token"]; 
NSURL *accessURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"]; 
NSURL *authorizeURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/authorize"]; 
NSString *scope = @"http://api.twitter.com/"; 

GTMOAuthAuthentication *auth = [self authForTwitter]; 
[auth setCallback:@"http://www.noop.com/OAuthCallback"]; 

GTMOAuthViewControllerTouch *viewController; 
viewController = [[GTMOAuthViewControllerTouch alloc] initWithScope:scope 
                  language:nil 
                 requestTokenURL:requestURL 
                authorizeTokenURL:authorizeURL 
                 accessTokenURL:accessURL 
                 authentication:auth 
                 appServiceName:@"CK12: Twitter" 
                  delegate:self 
                finishedSelector:@selector(viewController:finishedWithAuth:error:)]; 
} 

- (GTMOAuthAuthentication *)authForTwitter { 

GTMOAuthAuthentication *auth = [[GTMOAuthAuthentication alloc] initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1 
                consumerKey:TWITTER_CONSUMER_KEY 
                 privateKey:TWITTER_CONSUMER_SECRET]; 

[auth setServiceProvider:@"Twitter"]; 

return auth; 
} 

Моя проблема, если я меняю время устройства т.е. делает его 1 час поздно, то я получаю следующее сообщение об ошибке:

Error Domain=com.google.HTTPStatus Code=401 and error message is : failed to validate oauth signature and token . 

Так может кто-нибудь предложить, пожалуйста, как решить эту проблему. если системное время не так, я также хочу, чтобы он работал.

+0

У вас проверено ваше секретное приложение и секретный ключ приложения –

+0

, если системное время верное, тогда это работает нормально. , , поэтому секрет приложения и ключ приложения верны. –

+0

twitter server проверяет отметку времени вашего запроса ... так что вам нужно правильно отправить текущее время, я думаю, что другого варианта нет. –

ответ

0

Наконец-то я получил решение для этого. , , ,

Одна из причин, по которым мы получаем эту ошибку: «Не удалось проверить подпись и токен OAuth» , когда системное время неверно. Поскольку запрос OAuth содержит параметры временной метки системы, поэтому, когда время устройства не находится в пределах 5 минут времени сервера Twitter, мы получаем «Не удалось проверить подпись и токен OAuth».

Есть два способа заставить его работать, если время устройства даже неверно.

1.Make HTTP HEAD запрос конечной точке на api.twitter.com - вы получите HTTP-заголовок Date в ответ, который указывает текущее время, понятное Twitter. Затем вы конвертируете это в эпоху и корректируете значения oauth_timestamp с помощью определенного смещения.

2. Есть небольшая библиотека iOS по имени ios-ntp link: http://code.google.com/p/ios-ntp. используйте это, чтобы получить текущее Точное время.

После этого я просто установить метку объекта OAuth следующим способом

- (GTMOAuthAuthentication *)authForTwitter 
{ 
GTMOAuthAuthentication *auth = [[GTMOAuthAuthentication alloc] 
      initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1 
      consumerKey:TWITTER_CONSUMER_KEY 
      privateKey:TWITTER_CONSUMER_SECRET]; 
[auth setServiceProvider:@"Twitter"];  
NSDate * currentdate = //GET ACCURATE DATE HERE ;    
[auth setTimestamp:[NSString stringWithFormat:@"%f",[currentdate timeIntervalSince1970]]]; 
return auth; 
} 

это все. , .Happy Coding :)

Смежные вопросы