Objective OA中的Twitter OAuth和accessToken到GET状态/ user_timeline

时间:2013-02-18 12:12:01

标签: objective-c twitter oauth afnetworking access-token

我正在尝试从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)设置默认应用访问类型以进行读取?或读/写?要求获取令牌?在......中使用这个值?

4 个答案:

答案 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)

STTwitter很简单易用。我还添加了example你可以获得公共推特时间线