3

我正在尝试从 Twitter 获取 accessToken 值,以便在我的应用程序中使用它(我需要使用 API v1.1 的身份验证模型来获取 GET statuses/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 身份验证模型获取状态/用户时间线的更简单方法是什么?谢谢!

编辑:可能的航路点?

1) 在 dev.twitter.com 上注册一个新应用

2)在OAuth设置中,读取Consumer key和Consumer secret

3) 将默认应用访问类型设置为读取?或读/写?要求访问令牌?在....中使用这个值?

4

3 回答 3

21

自从 Twitter 添加仅应用程序模式以来已经有几天了。在这种模式下,您可以在没有用户上下文的情况下访问特定的 API 端点,即。您的用户不必进行身份验证。只有应用程序会偶尔进行一次身份验证以获得“承载令牌”,然后在每个请求中发送该令牌。

以下代码获取不记名令牌,然后检索@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 演示项目(使用您自己的消费者密钥/秘密)。

于 2013-03-14T19:58:22.733 回答
3

如果你有自己的消费者令牌,你可以使用我写的STTwitter 库。

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:]了解自动化过程。

于 2013-02-19T13:41:02.967 回答
0

STTwitter使用简单。我还添加了示例,您可以获取公共 Twitter 时间线

于 2014-02-02T20:54:50.243 回答