从iOS Facebook 2.x迁移时如何避免用户退出 - > 3.X

时间:2012-11-06 22:00:48

标签: migration facebook-authentication facebook-ios-sdk

将我们的Facebook iOS集成从2.x SDK升级到3.x SDK会自动将用户从以前登录过的用户中删除,因为我们以前必须手动处理的身份验证凭据现在在幕后处理通过新的SDK。

有没有办法强制3.x SDK使用我们之前手动存储的访问令牌和到期日期进行身份验证,作为一次性身份验证迁移?

提前致谢!

2 个答案:

答案 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];
   }