Three20 和 Facebook Graph API 问题
Posted
技术标签:
【中文标题】Three20 和 Facebook Graph API 问题【英文标题】:Three20 and Facebook Graph API Problem 【发布时间】:2011-03-10 21:09:27 【问题描述】:我正在尝试将 Three20 Facebook 示例应用与 Facebook Graph API 一起使用(进行身份验证并获取访问令牌)。我正在为 TTURLRequest 使用以下代码:
- (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)的 url 非常有效,但是每当我在完全相同的页面上使用访问令牌(即https://graph.facebook.com/markzuckerberg/feed?access_token=...)时,我都会收到描述“错误 url”的错误。将任一 URL 复制到 Web 浏览器表明两者都可以正常工作,但 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"]];
【讨论】:
【参考方案2】:检查您的网址的语法。我假设您没有正确转义您的 get 参数,例如访问令牌和/或其他参数。
【讨论】:
在将访问令牌添加到 url 之前,我使用以下代码对其进行转义:[_facebook.accessToken stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]。访问令牌是唯一的参数。我在请求之前对 URL 进行 NSLog,如果我将 NSLogged URL 复制到浏览器,则 JSON 加载正常,所以我不认为这是一个转义问题。 self.accessToken = [_facebook.accessToken stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; self.dataSource = [[[TTFacebookNewsFeedDataSource alloc] initWithQuery:[NSString stringWithFormat:@"graph.facebook.com/markzuckerberg/feed?access_token=%@", self.accessToken]] autorelease]; 评论中的格式搞砸了,所以我将其添加到问题中以上是关于Three20 和 Facebook Graph API 问题的主要内容,如果未能解决你的问题,请参考以下文章
Facebook Graph API Explorer 未列出其他人上传的已标记照片
如何使用 Facebook Graph API 获取群组视频列表?
如何通过 facebook graph api 获取***故事讲述者用户 ID