如何在 iOS 中使用 Twitter API 1.1 获取 Token

Posted

技术标签:

【中文标题】如何在 iOS 中使用 Twitter API 1.1 获取 Token【英文标题】:How to get Token using Twitter API 1.1 in iOS 【发布时间】:2013-12-07 06:03:13 【问题描述】:

我正在使用“STTwitter”从下面的 URL 和请求正文中获取令牌

https://dev.twitter.com/docs/api/1.1/post/oauth2/token

下面是带有 URL 的请求正文代码

- (void)verifyCredentialsWithSuccessBlock:(void(^)(NSString *username))successBlock errorBlock:(void(^)(NSError *error))errorBlock 

    [self postResource:@"oauth2/token"
         baseURLString:@"https://api.twitter.com"
            parameters:@ @"grant_type" : @"client_credentials" 
          useBasicAuth:YES
   uploadProgressBlock:nil
 downloadProgressBlock:nil
          successBlock:^(id request, NSDictionary *requestHeaders, NSDictionary *responseHeaders, id json) 

              NSString *tokenType = [json valueForKey:@"token_type"];
              if([tokenType isEqualToString:@"bearer"] == NO) 
                  NSError *error = [NSError errorWithDomain:NSStringFromClass([self class]) code:STTwitterAppOnlyCannotFindBearerTokenInResponse userInfo:@NSLocalizedDescriptionKey : @"Cannot find bearer token in server response"];
                  errorBlock(error);
                  return;
              

              self.bearerToken = [json valueForKey:@"access_token"];

              successBlock(_bearerToken);

           errorBlock:^(id request, NSDictionary *requestHeaders, NSDictionary *responseHeaders, NSError *error) 
              errorBlock(error);


              NSLog(@"ERROR %@",[error description]);

          ];

为了调用上面的方法,我在下面的代码中做

STTwitterAppOnly *twitter1 = [[STTwitterAppOnly alloc] init];
    [twitter1 verifyCredentialsWithSuccessBlock:^(NSString *bearerToken) 

        NSLog(@"sd");

        [self.twitter getUserTimelineWithScreenName:@"SEREEN_NAME"
                                  successBlock:^(NSArray *statuses) 

                                      NSLog(@"ERROR ::: %@",[statuses description]);

                                      // ...
                                   errorBlock:^(NSError *error) 
                                      // ...
                                  ];

     errorBlock:^(NSError *error) 
        // ...
    ];

执行上述代码时出现以下错误...

**Error Domain=STHTTPRequest Code=99 "Unable to verify your credentials"** 

你能建议我在我的代码中遗漏了什么吗?

我担心的是,我想在不登录 Twitter 的情况下阅读 Twitter 提要。仅在 Twitter API V1.1 中使用“Consumer Key”和“Secret Key”。

谢谢

【问题讨论】:

【参考方案1】:

如果你有 ConsumerKey 和 ConsumerSecret 你可以试试

STTwitterAPIWrapper *twitterAPI = [[STTwitterAPIWrapper twitterAPIApplicationOnlyWithConsumerKey:@"Your Consumer Key" consumerSecret:@"Your Consumer Secret"] autorelease];
[twitterAPI verifyCredentialsWithSuccessBlock:^(NSString *username) 
     [twitterAPI getUserTimelineWithScreenName:@"your ScreenName" count:25 successBlock:^(NSArray *statuses) 
         NSLog(@"Success:%@", statuses);

      errorBlock:^(NSError *error)
         NSLog(@"Error : %@",error.description);
     ];

 errorBlock:^(NSError *error) 
         NSLog(@"Error : %@",error.description);
];

【讨论】:

【参考方案2】:

验证您是否在 plist 和 header 前缀中输入了 Consumer key 和 Consumer Secret...

【讨论】:

【参考方案3】:

您发布的代码有几个问题。首先,您从验证方法错误块而不是成功块发出请求。其次,您直接使用 postResource 方法,而不是更高级别的方法来做您想做的事。

如果您想要的只是消费者令牌的不记名令牌,您可以从 STTwitter README 中复制/粘贴示例代码到 App Only Authentication 部分。

【讨论】:

以上是关于如何在 iOS 中使用 Twitter API 1.1 获取 Token的主要内容,如果未能解决你的问题,请参考以下文章

如何通过iOS中的Twitter API获取用户电子邮件地址?

如何使用已安装的 Twitter 应用进行身份验证

如何在 Python 中使用新的 Twitter API 1.1 搜索? [关闭]

如何使用 Twitter API 1.1 获取用户图像?

如何通过经典 ASP 使用 Twitter 获取搜索/推文 api 1.1

如何在 Twitter API 中使用获取帐户/设置?