【问题标题】:How to get Token using Twitter API 1.1 in iOS如何在 iOS 中使用 Twitter API 1.1 获取 Token
【发布时间】: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”。

谢谢

【问题讨论】:

    标签: ios objective-c twitter-bootstrap twitter


    【解决方案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 部分。

        【讨论】:

          猜你喜欢
          • 2013-06-09
          • 2013-06-14
          • 2013-08-02
          • 2013-01-28
          • 1970-01-01
          • 2013-02-23
          • 1970-01-01
          • 2014-01-14
          • 2012-12-25
          相关资源
          最近更新 更多