2011-05-17 119 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