将我们的 Facebook iOS 集成从 2.x SDK 升级到 3.x SDK 会自动注销之前登录的用户,因为我们过去必须手动处理的身份验证凭据现在由新的后台处理开发工具包。
有没有办法强制 3.x SDK 使用我们之前手动存储的访问令牌和到期日期进行身份验证,作为一次性身份验证迁移?
提前致谢!
将我们的 Facebook iOS 集成从 2.x SDK 升级到 3.x SDK 会自动注销之前登录的用户,因为我们过去必须手动处理的身份验证凭据现在由新的后台处理开发工具包。
有没有办法强制 3.x SDK 使用我们之前手动存储的访问令牌和到期日期进行身份验证,作为一次性身份验证迁移?
提前致谢!
终于想通了。该解决方案涉及使用他们提供的FBSessionTokenCachingStrategy对象,特别是FBSessionManualTokenCachingStrategy:
if (isUserUpgrading) {
FBSessionTokenCachingStrategy *strategy = [[[FBSessionManualTokenCachingStrategy alloc] initWithUserDefaultTokenInformationKeyName:nil] autorelease];
strategy.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"FBSessionToken"]; // use your own UserDefaults key
strategy.expirationDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"FBSessionExpiration"]; // use your own UserDefaults key
FBSession *session = [[[FBSession alloc] initWithAppID:@"MY_APP_ID" // use your own appId
permissions:nil
urlSchemeSuffix:nil
tokenCacheStrategy:strategy] autorelease];
[FBSession setActiveSession:session];
} else {
[FBSession openActiveSessionWithReadPermissions:...]; // normal authentication
}
对于 Facebook sdk 3.1.1,我必须创建一个新类 FBSessionManualTokenCachingStrategy 它是 FBSessionTokenCachingStrategy 的子类,并将 fetchTokenInformation 方法定义为
- (NSDictionary*)fetchTokenInformation; { return [NSDictionary dictionaryWithObjectsAndKeys: self.accessToken, FBTokenInformationTokenKey, self.expirationDate, FBTokenInformationExpirationDateKey, nil]; }