2013-03-07 68 views
1

我一直在使用旧的Facebook SDK并在NSUserDefaults中保存accessTokenexpirationDate。但是,现在在新的Facebook SDK 3.2有一个新的类名为FBAccessTokenData,我可以从那里通过采取的accessToken:无法在SDK 3.2中保存Facebook accessToken

[FBSession activeSession].accessTokenData.accessToken 
[FBSession activeSession].accessTokenData.expirationDate 

我的问题是,当我重新启动我的应用程序,并再次点击Facebook的按钮,它会向Facebook要求提供新的令牌,尽管我在3分钟前使用了该应用程序,登录Facebook并获得了新的令牌。所以令牌没有被保存。

我想新accessToken保存到[FBSession activeSession]accessTokenexpirationDate只读性能。

我一直在阅读Facebook SDK文档几次,搜索stackOverflow和网络,仍然没有得到任何线索如何做到这一点。

这是我的代码:

- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error 
{ 
    switch (state) 
    { 
     case FBSessionStateOpen: 
     { 
      // This is how i'm trying to save the token, like the old Facebook SDK. 
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      [defaults setObject:[FBSession activeSession].accessTokenData.accessToken forKey:@"FBAccessTokenKey"]; 
      [defaults setObject:[FBSession activeSession].accessTokenData.expirationDate forKey:@"FBExpirationDateKey"]; 
      [defaults synchronize]; 

      NSLog(@"FB: Session is open!"); 
     } 
      break; 

     case FBSessionStateClosed: 
     case FBSessionStateClosedLoginFailed: 
     { 
      NSLog(@"FB: Session is closed or login failed"); 

      [self closeSession]; 
     } 
      break; 

     default: 
      break; 
    } 

    [[NSNotificationCenter defaultCenter] postNotificationName:FBSessionStateChangedNotification 
                 object:session]; 

    if (error) 
    { 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" 
                  message:error.localizedDescription 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
     [alertView show]; 
    } 
} 


- (void)openSession 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler: 
    ^(FBSession *session, FBSessionState state, NSError *error) 
    { 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
} 

- (void)closeSession 
{ 
    [FBSession.activeSession closeAndClearTokenInformation]; 
} 

在此先感谢!

回答

5

所以我找到了更多的搜索后的答案,如果有人有新的Facebook SDK 3.2accessToken问题,看看这个link。你会发现你在找什么。

基本上你创建了一个处理令牌保存和加载的类。比你保存到本地plist文件 - 非常容易和简单。

享受! :)

相关问题