我的应用根据给定的电视标签显示推文的简短列表,并附加发布推文的功能。
但是现在twitter已经为所有请求提供了oauth,我的推文列表并没有出现,因为它使用了旧的search.atom API。
因此,如何使用Sharekit访问搜索API并传入OAuth凭据,这样用户只需查看一次查看推文和在会话之间发布。
我尝试过使用SHKRequest,希望,由于ShareKit已经授权,它会通过这些信息;没有快乐,还有其他一些方法可以做到这一点,或者我只是使用它是错误/错误。
request = [[[SHKRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.twitter.com/1.1/search/tweets.json?q=twitter&result_type=recent"]
delegate:self
isFinishedSelector:@selector(sendFinishedSearch:)
params:nil
method:@"GET"
autostart:YES] autorelease];
我确实需要保持与4.3 API的兼容性,所以我不能使用iOS5 Twitter API。
免责声明:我正在继承某人的项目,因此我在修改项目时学习了我的XCode / ObjC知识(我来自C / C ++背景),所以请忽略我的无知。
答案 0 :(得分:1)
ShareKit包含SHKTwitter
类。它是SHKOAuthSharer
的子类。因此,您可以要求它执行授权/刷新并获取生成的令牌。
创建SHKTwitter
的实例并注册为其委托。实现- (void)sharerAuthDidFinish:(SHKSharer *)sharer success:(BOOL)success
委托方法。然后拨打tokenRequest
。调用委托方法时,如果success
为YES
,则可以获得accessToken
。
SHKTwitter *twitter = [[SHKTwitter alloc] init];
twitter.shareDelegate = self;
[twitter tokenRequest];
- (void)sharerAuthDidFinish:(SHKSharer *)sharer success:(BOOL)success
{
SHKTwitter *twitter = (SHKTwitter *)sharer;
if (twitter.accessToken != nil) {
NSLog(@"session: %@, %@", twitterSharer.accessToken.key, twitterSharer.accessToken.secret);
} else {
[twitter tokenAccess];
}
}
答案 1 :(得分:-1)
IN SHKOAuthSharer.m class您将获得方法中的Token:
- (void)tokenAccessTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data
{
if (SHKDebugShowLogs) // check so we don't have to alloc the string with the data if we aren't logging
SHKLog(@"tokenAccessTicket Response Body: %@", [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]);
///[[SHKActivityIndicator currentIndicator] hide];
if (ticket.didSucceed)
{
NSString *responseBody = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
//piyush Added
NSArray *strArray = [responseBody componentsSeparatedByString:@"="];
[[NSUserDefaults standardUserDefaults]setObject:[strArray objectAtIndex:([strArray count]-1)] forKey:@"TwitterUsername"];
**self.accessToken** = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
[responseBody release];
[self storeAccessToken];
//[self tryPendingAction];
[[NSNotificationCenter defaultCenter] postNotificationName:@"TwitterDidLogin" object:nil];
}
else
// TODO - better error handling here
[self tokenAccessTicket:ticket didFailWithError:[SHK error:SHKLocalizedString(@"There was a problem requesting access from %@", [self sharerTitle])]];
}