2011-03-10 91 views
0

我正在尝试使用Three20 Facebook示例应用程序以及Facebook Graph API(用于验证并获取访问令牌)。我使用下面的代码为TTURLRequest:Three20和Facebook Graph API问题

- (void)load:(TTURLRequestCachePolicy)cachePolicy more:(BOOL)more { 
    if (!self.isLoading && TTIsStringWithAnyText(_query)) { 
    NSString* url = _query; 
    NSLog(@"load:%@:", url); 

    TTURLRequest* request = [TTURLRequest requestWithURL:url delegate:self]; 

    request.cachePolicy = cachePolicy | TTURLRequestCachePolicyEtag; 
    request.cacheExpirationAge = TT_CACHE_EXPIRATION_AGE_NEVER; 

    TTURLJSONResponse* response = [[TTURLJSONResponse alloc] init]; 
    request.response = response; 
    TT_RELEASE_SAFELY(response); 

    [request send]; 
    } 
} 

这完全适用的网址没有访问令牌(即https://graph.facebook.com/markzuckerberg/feed),但每当我使用一个访问令牌完全相同的网页上(即https://graph.facebook.com/markzuckerberg/feed?access_token= ...)我得到与描述“错误的网址”错误。将任一网址复制到网络浏览器中都表明两者都可以正常工作,但URL请求只会为具有access_token的网址生成错误。

我想到的唯一可能的解释是TTURLRequest对URL的长度有限制。有没有人有任何想法,为什么这可能会发生和/或有任何解决方法?


更新:这是我如何构造URL:

self.accessToken = [_facebook.accessToken stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
self.dataSource = [[[TTFacebookNewsFeedDataSource alloc] initWithQuery:[NSString stringWithFormat:@"http://graph.facebook.com/markzuckerberg/feed?access_token=%@", self.accessToken]] autorelease]; 

回答

1

我通过使用FBRequest serializeURL固定此问题:

AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSString* url = [FBRequest serializeURL:@"https://graph.facebook.com/me/home" params:[NSMutableDictionary dictionaryWithObject:appDel.facebook.accessToken forKey:@"access_token"]]; 
0

检查网址的语法。我假设你没有正确地逃避你的get参数,例如访问令牌和/或其他参数。

+0

我使用下面的代码之前令牌逸出到它添加到URL访问:[_facebook.accessToken stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]。访问令牌是唯一的参数。我NSLog请求之前的URL,如果我复制NSLogged URL到浏览器JSON加载罚款,所以我不认为它是一个逃避问题。 – Josh 2011-03-11 03:19:55

+0

请向我展示你组装你的网址的代码。 – 2011-03-11 06:35:46

+0

self.accessToken = [_facebook.accessToken stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; self.dataSource = [[[TT FacebookNewsFeedDataSource alloc] initWithQuery:[NSString stringWithFormat:@“http://graph.facebook.com/markzuckerberg/feed?access_token=%@”,self.accessToken]] autorelease]; – Josh 2011-03-12 15:41:39