Twitter应用程序 - 使用"承载令牌"进行身份验证

kyl*_*ejm 6 twitter objective-c ios twitter-oauth

简短的问题:

我已经在apps.twitter.com为我的应用程序生成了访问令牌访问令牌密钥.我如何使用它们发送请求https://api.twitter.com/1.1/statuses/user_timeline.json

什么是承载令牌?它是访问令牌还是访问令牌秘密?或两者的编码?



一点背景:

我正在尝试制作一个应用程序,从我的Twitter时间线下载推文,而app用户不必通过他们的Twitter帐户进行身份验证.我知道我必须使用仅应用程序身份验证,并且文档(https://dev.twitter.com/docs/auth/application-only-auth)声明我需要使用Consumer KeyConsumer Secret来请求一个承载令牌.但是如果我已经使用generate按钮在apps.twitter.com上生成了令牌:


apps.twitter.com页面上我的应用程序的屏幕截图


我当然可以将这些硬编码到我的应用程序中并以某种方式将它们作为Bearer Token传递出来?像这样我期望:

#define kTwitterBearerToken @"123456"    

NSURL *twitterFeedURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kylejm_&count=10"];
NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:twitterFeedURL];
[URLRequest setHTTPMethod:@"POST"];
[URLRequest setValue:[NSString stringWithFormat:@"Bearer %@", kTwitterBearerToken] forHTTPHeaderField:@"Authorization"];
NSURLResponse *URLResponse;
NSError *URLerror;
NSData *tweetData = [NSURLConnection sendSynchronousRequest:URLRequest returningResponse:&URLResponse error:&URLerror];
NSError *JSONError;
NSArray *tweets = [NSJSONSerialization JSONObjectWithData:tweetData options:0 error:&JSONError];
NSLog(@"%@", tweets);
Run Code Online (Sandbox Code Playgroud)


在此先感谢您的答案和帮助!

凯尔

PS我看过STTwitter,但是当我想要实现的东西如此简单时,认为使用它是有点不必要的(至少看起来简单地将预先生成的令牌传递给我)...

Coc*_*ica 0

这是我对该应用程序基本时间表的想法。我一边打字一边思考,所以请耐心等待……

启动时检查您是否已缓存不记名令牌(将其存储在钥匙串中而不是用户默认值中可能是个好主意)......

否:如果没有不记名令牌,请执行步骤 2 中概述的调用然后坚持使用钥匙串,然后继续...

是:从持久钥匙串存储中取回它* 继续...

现在您有了一个不记名令牌,您需要创建一个 Base64 编码字符串(iOS 有可供您使用的方法),并在之前链接的页面步骤 3 的请求中使用该编码字符串。

如果在任何时候您需要重置不记名令牌,例如,如果您检测到一些不成功的登录并希望为用户提供尝试解决该问题的流程,则会有一个调用以使不记名令牌无效的请求,然后只需重新请求它,本质上是重复初始流程。

正如其他人提到的,Twitter 有一些烦人的速率限制,因此最好缓存返回的流结果并将其用于显示,然后使用速率限制较少的调用来找出某个日期范围内的推文数量,以便您可以确定是否需要更新缓存数据。这只是关于如何处理它的一种想法,我确信在查看 API 文档时还会出现其他想法。

希望有帮助...:)

  • 哦,是的,钥匙扣。有一些不错的示例代码,用于在应用程序中检索/写入/删除钥匙串条目。同样:GitHub。