2012-08-03 199 views
1

我試圖在我的應用程序中實現Facebook登錄並且它正在工作(我正在獲取訪問令牌),但每當我嘗試創建圖形請求時,下面的消息說,我需要一個有效的訪問令牌,以便使請求到圖形API:Facebook授權不起作用(iOS本機應用程序)

Error Domain=facebookErrDomain Code=10000 "The operation couldn’t be completed. (facebookErrDomain error 10000.)" UserInfo=0x6a99fa0 { 
    error=<CFBasicHash 0x6a99050 [0x1582b48]>{ 
     type = mutable dict, count = 3, 
      entries => 
       2 : <CFString 0x6a99340 [0x1582b48]>{contents = "type"} = <CFString 0x6a994d0 [0x1582b48]>{contents = "OAuthException"} 
       3 : <CFString 0x6a99470 [0x1582b48]>{contents = "message"} = <CFString 0x6a993d0 [0x1582b48]>{contents = "An active access token must be used to query information about the current user."} 
       6 : <CFString 0x6a52270 [0x1582b48]>{contents = "code"} = 2500 
     } 
    } 

對提出請求的代碼看起來像(也許我需要令牌在這裏添加訪問?):

[facebook requestWithGraphPath:@"me" andDelegate:self]; 

現在我知道一個事實,即訪問令牌是可以的,因爲在init方法我稱之爲更新,如果有必要的方法:

[facebook extendAccessTokenIfNeeded]; 

我也是實現委託方法extendAccessTokenIfNeeded

-(void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt { 
    NSLog(@"token extended"); //This NSLog hasn't been called, so I know the extending access token method wasn't fired... 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:accessToken forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:expiresAt forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 
} 

現在我缺少什麼嗎?我需要將訪問令牌添加到圖API請求嗎?如果是這樣,怎麼樣?

順便說一下,我也知道,如果我向公共路徑發出圖形請求,它會很好地工作。

回答

0

剛剛遇到同樣的問題,我不知道爲什麼,但原生facebook SDK似乎不會將它們的標記替換爲GET請求。可能是你麻煩?我用以下解決:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            _facebook.accessToken, @"access_token", 
            nil]; 

    [_facebook requestWithGraphPath:@"me/music" 
          andParams:params 
         andHttpMethod:@"GET" 
         andDelegate:self]; 

UPD答案是正確的[_facebook requestWithGraphPath:@"me" andParams:params andHttpMethod:@"GET" andDelegate:self]而不是[facebook requestWithGraphPath:@"me" andDelegate:self];

+0

您正在使用的所有相同的委託方法,如requestDidLoad/requestDidFailWithError?而不是使用他們現在棄用的REST API? – byteSlayer 2012-08-03 14:24:59

+0

只是試了一下,並得到了相同的錯誤信息.... – byteSlayer 2012-08-03 14:29:22

+0

關於委託 - 是的,我知道NSLog(@「%@」,request.url)不可用令牌。在requestDidFailWithError中。關於REST API - 它看起來像不,我認爲它使用圖表api – aknew 2012-08-03 14:33:50