Одна из причин, по которой мы получаем эту ошибку «Не удалось проверить подпись и токен OAuth», - неправильное системное время. Поскольку запрос OAuth содержит параметры системной метки времени, когда время устройства не превышает 5 минут времени сервера Twitter, мы получаем «Не удалось проверить подпись и токен OAuth».
Если это причина, и вы хотите, чтобы она работала, если системное время также не верно, то есть два способа заставить его работать:
Сделайте HTTP HEAD-запрос к конечной точке на api.twitter.com - вы получите HTTP-заголовок Date в ответе, который указывает текущее время, понятное Twitter. Затем вы конвертируете это в время эпохи и скорректируете ваши значения oauth_timestamp
на определенное смещение.
Есть небольшая библиотека iOS 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;
}
Вот и все ... Удачного кодирования:)