我阅读了几篇关于这个问题的帖子,但我找不到解决我的问题的方法。
基本上我有适用于 iOS 的 Facebook SDK“3.1.1”,并将代码更新为“3.5.3”版本。
我使用以下代码来使用缓存的访问令牌:
登录后:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:accessToken forKey:FBAccessTokenKey];
[defaults setObject:expirationDate forKey:FBExpirationDateKey];
[defaults synchronize];
下次我使用之前保存的数据时:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id accessToken = [defaults objectForKey:FBAccessTokenKey];
id expirationDate = [defaults objectForKey:FBExpirationDateKey];
if (accessToken && expirationDate) {
facebook.accessToken = accessToken;
facebook.expirationDate = expirationDate;
}
[[FBSession activeSession] isOpen];
但是现在我不能使用相同的代码,因为新的 SDK 使用 FBAccessTokenData,所以我有这个新的代码来获取旧会话:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id accessToken = [defaults objectForKey:FBAccessTokenKey];
id expirationDate = [defaults objectForKey:FBExpirationDateKey];
if (accessToken && expirationDate) {
FBAccessTokenData* accessTokenData = [FBAccessTokenData createTokenFromString:accessToken permissions:nil expirationDate:expirationDate loginType:FBSessionLoginTypeFacebookApplication refreshDate:nil];
// add the old token to the cache
[FBSessionTokenCachingStrategy.defaultInstance cacheFBAccessTokenData:accessTokenData];
[defaults removeObjectForKey:FBAccessTokenKey];
[defaults removeObjectForKey:FBExpirationDateKey];
[defaults synchronize];
}
// to login explicitly
[FBSession openActiveSessionWithReadPermissions:@[ @"email", @"user_location", @"user_birthday" ] allowLoginUI:NO completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self session:session updatedState:state withError:error];
}];
我在这里是因为最后一个代码不起作用,我尝试使用 nil 而不是传递权限,我得到了相同的结果,我必须再次登录并获得一个新令牌。但我只想获取旧会话,而不是再次为用户显示登录弹出窗口。
提前感谢您的帮助,
问候