【问题标题】:Three20 and Facebook Graph API ProblemThree20 和 Facebook Graph API 问题
【发布时间】: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];

【问题讨论】:

    标签: json ios facebook-graph-api three20


    【解决方案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];
      • 评论中的格式搞砸了,所以我将其添加到问题中
      猜你喜欢
      • 2011-09-26
      • 2023-03-10
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多