2011-03-10 188 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