如何从Sharekit获取Twitter的令牌信息

时间:2013-06-28 08:52:08

标签: ios objective-c twitter sharekit

我的应用根据给定的电视标签显示推文的简短列表,并附加发布推文的功能。

但是现在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 ++背景),所以请忽略我的无知。

2 个答案:

答案 0 :(得分:1)

ShareKit包含SHKTwitter类。它是SHKOAuthSharer的子类。因此,您可以要求它执行授权/刷新并获取生成的令牌。

创建SHKTwitter的实例并注册为其委托。实现- (void)sharerAuthDidFinish:(SHKSharer *)sharer success:(BOOL)success委托方法。然后拨打tokenRequest。调用委托方法时,如果successYES,则可以获得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])]];

}