1

私は古いFacebookSDKを使用していて、accessTokenとをexpirationDate内部に保存しましたNSUserDefaults。しかし今Facebook SDK 3.2、新しいクラスにはという新しいクラスがFBAccessTokenDataあり、そこから次を使用してaccessTokenを取得できます。

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

私の問題は、アプリを再起動してFacebookボタンをもう一度クリックすると、3分前にアプリを使用し、Facebookにログインして新しいトークンを取得したにもかかわらず、Facebookに移動して新しいトークンを要求することです。したがって、トークンは保存されていません。

accessToken新しいをに保存しようとしています[FBSession activeSession]accessTokenexpirationDate読み取り専用のプロパティです。

私はFacebookSDKのドキュメントを数回読んでいて、stackOverflowとWebを検索しましたが、それを行う方法がわかりませんでした。

これは私のコードです:

- (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];
}

前もって感謝します!

4

1 に答える 1

5

だから私はもっと検索した後に答えを見つけました、誰かが新しいものに問題があるならFacebook SDK 3.2 accessToken、このリンクを見てください。そしてあなたはあなたが探しているものを見つけるでしょう。

基本的に、トークンの保存と読み込みを処理するクラスを作成します。ローカルのplistファイルに保存するよりも-非常に簡単でシンプルです。

楽しみ!:)

于 2013-03-07T09:39:02.940 に答える