2011-03-07 106 views
1

我正在尋找一種方式來保存訪問令牌允許用戶在Facebook上發佈,而無需登錄每次調用圖形API:貯藏Facebook的令牌離線訪問

我需要offline_access令牌,我將它存儲在NSUserDefaults的,但是當我嘗試使用它,我再次得到一個FacebookErrDomain錯誤10000

這裏是我做的:

在fbDidLogin我拿到的access_token,並將其保存在用戶的默認值

- (void)fbDidLogin { 
    NSString *token = self.facebook.accessToken; 
    [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"facebookToken"]; 

} 

後,當我運行應用程序再次,我只是從用戶那裏獲取默認的令牌,並將它們分配給facebook的對象:

NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"facebookToken"]; 
[_facebook setAccessToken:token]; 

但它不工作..

有沒有人任何想法我可能做錯了什麼?

謝謝, 文森特。

編輯: 如果我在[[NSUserDefaults standardUserDefaults] objectForKey:@"facebookToken"];之後做了一個NSlog,我可以看到該令牌已保存。

回答

7

我有同樣的問題,我發現問題是你沒有保存到期日期。

如果你這樣做,它會允許你重新登錄。

示例代碼:

[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"fb_access_token"]; 
[[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"fb_exp_date"]; 

檢索是一樣的,只是設置_facebook.expirationDate

2

請確保調用:

[[NSUserDefaults standardUserDefaults] synchronize]; 

這將把您的喜好 「保存」 到磁盤/閃存。

在保存它之前還要對令牌執行NSLog以確保它不爲零。

+0

嗨,我確定令牌被保存,因爲我可以看到它,當我從用戶默認值恢復它。我注意到的另一件事是,令牌是不同的,每次我登錄並要求權限,不知道它是否有幫助。我用這些信息更新了我的問題 – vdaubry 2011-03-07 20:19:42

3

好吧,它似乎是Facebook的iOS SDK是越野車。

使用存儲在用戶默認的令牌,我可以使用curl執行在我的牆上一個帖子:

curl -F 'access_token=br69pK_lh0Xbj....plDRUdG97a55KIHzlaiw' \ 
    -F 'message=TEST API.' \ 
    https://graph.facebook.com/ME/feed 

所以,我只是執行HTTPS POST,因此使用ASIHTTPRequest此代碼的工作就像一個魅力:

NSURL* faceboobUrl = [NSURL URLWithString:@"https://graph.facebook.com/ME/feed"]; 
self.request = [ASIFormDataRequest requestWithURL:faceboobUrl]; 
[request setRequestMethod:@"POST"]; 
[request setPostValue:token forKey:@"access_token"]; 
[request setPostValue:msg forKey:@"message"]; 
[request setDelegate:self]; 
[request setTimeOutSeconds:TIMEOUT]; 
[request startAsynchronous]; 

不,謝謝Facebook的;)

文森特