我正在尝试从Twitter获取accessToken值,以便在我的应用中使用它(我需要使用API v1.1的 GET状态/ user_timeline 的身份验证模型);我在api.twitter.com上注册了我的应用程序,导入了项目中的AFOAuth1Client类,这是简单的代码:
- (void)viewDidLoad
{
self.twitterClient = [[AFOAuth1Client alloc] initWithBaseURL:
[NSURL URLWithString:@"https://api.twitter.com/"] key:@"MYKEY" secret:@"MYSECRETKEY"];
AFOAuth1Token *accessToken;
[self.twitterClient acquireOAuthAccessTokenWithPath:@"oauth/request_token" requestToken:accessToken accessMethod:@"GET" success:^(AFOAuth1Token *accessToken) { // I have tried also accessMethod: @"POST"
NSLog(@"Success: %@", accessToken);
} failure:^(NSError *error) {
NSLog(@"Error: %@", error);
}];
}
不幸的是,XCode给了我这个错误:
Error: Error Domain=AFNetworkingErrorDomain Code=-1011 "Expected status code in (200-299), got 401" UserInfo=0x79a14f0 {NSLocalizedRecoverySuggestion=Failed to validate oauth signature and token, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x7956390>
这里有什么问题?我需要在api.twitter.com上注册应用程序吗?它是正确的方式,或者,在iOS中使用API v1.1的Twitter身份验证模型获取状态/ user_timeline 的简单方法是什么?谢谢!
编辑:可能的航路点?
1)在dev.twitter.com上注册一个新应用
2)在OAuth设置中,读取消费者密钥和消费者密钥
3)设置默认应用访问类型以进行读取?或读/写?要求获取令牌?在......中使用这个值?
答案 0 :(得分:21)
自推特添加application only模式以来,已经过了几天。在此模式下,您可以在没有用户上下文的情况下访问特定的API端点,即。您的用户无需进行身份验证。只有应用程序会偶尔进行身份验证才能获得一个&#34; bearer token&#34;然后在每个请求中发送。
以下代码获取持票人令牌,然后检索@barackobama的公共时间表。
STTwitterAPI *twitter = [STTwitterAPI twitterAPIApplicationOnlyWithConsumerKey:@""
consumerSecret:@""];
[twitter verifyCredentialsWithSuccessBlock:^(NSString *bearerToken) {
NSLog(@"Access granted with %@", bearerToken);
[twitter getUserTimelineWithScreenName:@"barackobama" successBlock:^(NSArray *statuses) {
NSLog(@"-- statuses: %@", statuses);
} errorBlock:^(NSError *error) {
NSLog(@"-- error: %@", error);
}];
} errorBlock:^(NSError *error) {
NSLog(@"-- error %@", error);
}];
请参阅STTwitter iOS演示项目以获取一个工作示例(使用您自己的消费者密钥/秘密)。
答案 1 :(得分:3)
如果您有自己的消费者令牌,则可以使用我写的STTwitter library。
STTwitterAPI *twitter =
[STTwitterAPI twitterAPIWithOAuthConsumerName:@""
consumerKey:@"your_key"
consumerSecret:@"your_secret"
username:@"username"
password:@"password"];
[twitter verifyCredentialsWithSuccessBlock:^(NSString *username) {
NSLog(@"Access granted for %@", username);
[twitter getUserTimelineWithScreenName:@"barackobama"
successBlock:^(NSArray *statuses) {
NSLog(@"-- statuses: %@", statuses);
} errorBlock:^(NSError *error) {
NSLog(@"-- error: %@", error);
}];
} errorBlock:^(NSError *error) {
NSLog(@"-- error %@", error);
}];
如果您的令牌未启用“xAuth”,则必须使用PIN码。 STTwitter提供简单的基于异步块的方法来询问用户。您也可以选择自动执行PIN检索,有关自动过程,请参阅STTwitterDemo -[AppDelegate guessPIN:]。
答案 2 :(得分:0)
您可能希望使用iOS内置的Twitter框架。
请参阅Apple的Tweeting示例代码。
答案 3 :(得分:0)