在SDK 3.2中无法保存Facebook accessToken

Yos*_*far 1 facebook objective-c ios facebook-access-token

我一直在使用旧的Facebook SDK并保存了accessTokenexpirationDate里面的NSUserDefaults.但是现在在新版本中Facebook SDK 3.2有一个叫做的新类FBAccessTokenData,我可以通过以下方式从那里获取accessToken:

[FBSession activeSession].accessTokenData.accessToken
[FBSession activeSession].accessTokenData.expirationDate
Run Code Online (Sandbox Code Playgroud)

我的问题是当我重新启动我的应用程序并再次单击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];
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Yos*_*far 5

所以我在搜索更多后找到答案,如果有人对新问题有疑问Facebook SDK 3.2 accessToken,请查看此链接.你会找到你想要的东西.

基本上,您创建了一个处理令牌保存和加载的类.比你把它保存到本地plist文件 - 非常简单.

请享用!:)