将我们的Facebook iOS集成从2.x SDK升级到3.x SDK会自动将用户从以前登录过的用户中删除,因为我们以前必须手动处理的身份验证凭据现在在幕后处理通过新的SDK。
有没有办法强制3.x SDK使用我们之前手动存储的访问令牌和到期日期进行身份验证,作为一次性身份验证迁移?
提前致谢!
答案 0 :(得分:4)
终于明白了。解决方案涉及使用他们提供的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
}
答案 1 :(得分:0)
对于Facebook sdk 3.1.1我必须创建一个新类FBSessionManualTokenCachingStrategy,它是FBSessionTokenCachingStrategy的子类,并将fetchTokenInformation方法定义为
- (NSDictionary*)fetchTokenInformation; { return [NSDictionary dictionaryWithObjectsAndKeys: self.accessToken, FBTokenInformationTokenKey, self.expirationDate, FBTokenInformationExpirationDateKey, nil]; }