稍微搜尋一下,可以找到這篇解法。剛好就是修改同一個sample而來的。不過修改的程式碼我這邊再補充完整一點:
打開DemoAppViewController.m,先在最上面加上
#define ACCESS_TOKEN_KEY @"fb_access_token" #define EXPIRATION_DATE_KEY @"fb_expiration_date"定義兩個Key的名稱,等等要儲存Access Token跟Expiration Date。接著找到fbDidLogin這個method,在最後面加上
[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:ACCESS_TOKEN_KEY]; [[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:EXPIRATION_DATE_KEY]; [[NSUserDefaults standardUserDefaults] synchronize];就是登入完後把Access Token跟Expiration Date儲存起來。接著找到login這個method,把內容改成
_facebook.accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:ACCESS_TOKEN_KEY]; _facebook.expirationDate = [[NSUserDefaults standardUserDefaults] objectForKey:EXPIRATION_DATE_KEY]; if(![_facebook isSessionValid]) { [_facebook authorize:_permissions delegate:self]; }else{ [self fbDidLogin]; }這段就是把之前存的Access Token跟Expiration Date抓出來給_facebook,然後用
[_facebook isSessionValid]檢查這樣Session能不能用,不能用的話就去要授權,能用的話就直接執行登入後的動作。而登出後我們也應該手動清除這兩個資料,所以找到fbDidLogout,在最後面加上
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:ACCESS_TOKEN_KEY]; [[NSUserDefaults standardUserDefaults] setObject:nil forKey:EXPIRATION_DATE_KEY]; [[NSUserDefaults standardUserDefaults] synchronize];這樣就行啦!還有一個重點就是permissions記得要跟user要offline_access,這樣可以讓Expiration Date長達4001/1/1,就不怕Access Token過期啦。這樣改了以後,如果之前登入過,按下Login之後就不會跳授權頁,而是直接進入登入後的狀態。實際的App.裡面就是找適當的時機去呼叫login method囉。
沒有留言:
張貼留言