2011-05-17 118 views
0

iOS初學者在這裏。我使用下面的代碼保存我的Facebook的accessToken和EXPIRATIONDATE NSUserDefaults的中:在iOS的NSUserDefaults中保存Facebook access_token

facebook = [[Facebook alloc] initWithAppId:@"225083222506272"]; 
    [facebook authorize:nil delegate:self]; 
    NSString *access=[facebook accessToken]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:access, @"accessToken",[facebook expirationDate], @"expirationDate",nil]; 
    [defaults registerDefaults:appDefaults]; 

我試圖找回的accessToken和到期日期與以後調用:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *access=[defaults valueForKey:@"accessToken"]; 
    NSDate *date=[defaults objectForKey:@"expirationDate"]; 
    [facebook fbDialogLogin:access expirationDate:date]; 

但訪問和日期爲空。我究竟做錯了什麼?

+0

NSLog你的訪問NSString。它是否返回一個值? – shabbirv 2011-05-17 01:06:51

+0

是的,它返回null – John 2011-05-17 01:21:27

+0

爲什麼它返回null?它應該返回一個值... – bobbypage 2011-05-17 01:33:36

回答

2

這裏的代碼不同步。這意味着在撥打[facebook authorize:nil delegate:self];之後它不會阻止。您應該實施fbDidLogin委託方法,以便在用戶實際登錄成功時收到通知。此時,檢索訪問令牌並將其保存爲用戶默認值。

這裏的一個局部樣品:

- (void)userClickedFacebookLogin { 
    [facebook authorize:nil delegate:self]; // delegate is self 
} 

// Delegate method that you should implement to get notified 
// when user actualy logs in. 
- (void)fbDidLogin { 
    // now get the access token and save to user defaults 
    NSString *access = [facebook accessToken]; 
    // .. 
} 

還要確保具有上述代碼中的類實現以最小的FBSessionDelegate協議。

@interface MyClass <FBSessionDelegate> { 

} 

@end 

看那DemoApp樣品並專門DemoAppViewController類從Facebook得到一個更好的主意。

+0

謝謝,它將其保存到NSUserDefaults中。如果我重新運行該項目,它將從頭開始,我將不得不重新登錄,對吧? – John 2011-05-17 01:42:27

+0

不知道 - 我*認爲* Facebook可能已將授權狀態緩存在'Documents /'文件夾中,但您可以檢查。 – Anurag 2011-05-17 01:44:56