我認爲解決方案enbr張貼不完整。我將解釋原因:
當Facebook會話過期並且您繼續使用舊訪問令牌時,會返回訪問令牌錯誤。註銷不是會話過期的唯一場景(例如,更改Web中的登錄密碼)。因此,僅僅在註銷後清除用戶默認值是不夠的。
從客戶端,我們不知道我們擁有的訪問令牌是否實際上是有效的,直到響應帶有這樣的信息。因此,您需要檢測訪問令牌錯誤並通過清除舊訪問令牌和截止日期將Facebook實例恢復到工作狀態。這樣,用戶將需要再次登錄以獲取新的訪問令牌。
因此,國際海事組織,你需要做的是:
處理錯誤和當發生一個訪問令牌錯誤檢測。
當發生訪問令牌錯誤時,自動註銷並清理用戶默認設置以刪除舊的訪問令牌(步驟3)。
作爲註銷的結果,您需要清除訪問令牌和過期日期的用戶默認值(如已發佈)。
在這裏,你有一些代碼,可以用來檢測訪問令牌錯誤:
-(BOOL)isAccessTokenError:(NSError *) error {
if ([[error domain] isEqualToString:@"facebookErrDomain"] && [error code] == 10000) {
NSDictionary *userInfo = [error userInfo];
NSDictionary *errorAsDictionary = [userInfo objectForKey:@"error"];
if ([[errorAsDictionary objectForKey:@"type"] isEqualToString:@"OAuthException"]) {
//Invalid access token
return YES;
}
}
if ([[error domain] isEqualToString:@"facebookErrDomain"] && ([error code] == 110 || [error code] == 190)) {
//Error accessing access token
return YES;
}
return NO;
}
的地方來處理這樣的錯誤:
- (void)request:(FBRequest*)request didFailWithError:(NSError*)error;
- (void)dialog:(FBDialog*)dialog didFailWithError:(NSError *)error;
我希望這有助於。
更新: 我忘了提。如果您正在使用SSO功能(很可能),我認爲在登錄之前清理Facebook cookie是一個非常好的主意。有時候,無效訪問令牌錯誤後,似乎登錄不會將Facebook對象恢復到工作狀態(有效訪問令牌),除非執行「乾淨登錄」。雖然不總是工作。
另外,如果您未使用SSO功能,則用於修復似乎會自動消失的ghost登錄彈出窗口。
這是我如何清潔餅乾:
NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:
[NSURL URLWithString:@"http://login.facebook.com"]];
for (NSHTTPCookie* cookie in facebookCookies) {
[cookies deleteCookie:cookie];
}
enter code here
來源
2011-08-31 15:36:57
Lio
h'mmm ...我有這個問題,並希望這將解決這一問題,但沒有好。我不斷收到錯誤消息,「必須使用活動訪問令牌來查詢有關當前用戶的信息。」非常令人費解。奇怪的是,它有一天運行良好,但現在我似乎被卡住了。我正在刪除存儲在UserDefaults中的Cookie和令牌信息,但即使重新登錄,我也會得到相同的錯誤。黨... – John