1

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

但是现在 twitter 已经对所有请求进行了 oauth,我的推文列表没有出现,因为它使用的是旧的 search.atom API。

因此,我如何访问搜索 api 并使用 Sharekit 传递 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++ 背景),所以请忽略我的无知。

4

2 回答 2

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];
    }
}
于 2013-07-04T21:31:25.883 回答
-1

在 SHKOAuthSharer.m 类中,您将在方法中获得访问令牌:

- (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])]];

}
于 2013-06-28T12:23:01.947 回答