私は古い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]
がaccessToken
、expirationDate
は読み取り専用のプロパティです。
私は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];
}
前もって感謝します!