为 iOS SDK 迁移 Facebook 身份验证凭据

Posted

技术标签:

【中文标题】为 iOS SDK 迁移 Facebook 身份验证凭据【英文标题】:Migrating Facebook authentication credentials for iOS SDK 【发布时间】:2012-10-31 20:54:04 【问题描述】:

有没有人有任何从旧的 ios FB SDK(托管在他们的 GitHub 帐户上)迁移到他们的 .framework(基于包的安装程序)的提示?我在获取现有身份验证令牌和到期日期对象以针对新的 FBSession 对象进行验证时遇到问题。

情况是这样的

在旧的 SDK/技术中,Facebook iOS SDK 要求您保存身份验证等内容。令牌和到期日期通过您自己的存储机制手动进行。在基于新框架的 SDK 中,他们现在会为您处理此问题,但为了迁移用户(即不让他们重新登录),我需要将此信息提供给新 SDK。

最终,Facebook 将 K-V 存储在 NSUserDefaults 中,他们甚至会告诉您根键名称以及它们用于存储此信息的字典的嵌套 K-V 的所有键。

他们的令牌类 FBSessionTokenCachingStrategy 甚至有一个类方法来验证 NSDictionary 是否验证到建立可用 Facebook 会话的正确字典

+ (BOOL)isValidTokenInformation:(NSDictionary*)tokenInformation;

所以我采用了我之前存在的身份验证。令牌和过期时间,将它们放入新字典中,将其存储在正确的键控位置并同步 NSUserDefaults。

到目前为止还不错吧?好吧,一旦我通过

初始化FBSession对象

- (id)initWithAppID:(NSString*)appID permissions:(NSArray*)permissions urlSchemeSuffix:(NSString*)urlSchemeSuffix tokenCacheStrategy:(FBSessionTokenCachingStrategy*)tokenCachingStrategy;

整个密钥从 NSUserDefaults 中删除,会话对象的 state 属性处于 FBSessionStateCreated 的状态(即没有预先存在的状态)与它应该是 FBSessionStateCreatedTokenLoaded 的状态(即它知道它具有本地保存的属性并准备好在线检查)。

为什么要删除它?它针对类方法进行了验证。

谢谢

【问题讨论】:

【参考方案1】:

事实证明,较新的 Facebook SDK 的本地存储对象也保留了与令牌相关的权限列表。以前不需要这样做,所以虽然我没有在本地保存它,但我的权限列表没有改变。所以我所做的还将权限列表保存到新的存储对象中(总共 3 个键:auth.token、到期日期和权限列表)。

完成此操作后,创建/初始化 FBSession 对象并不会删除我本地存储的对象,并且在调用 openWithCompletionHandler: 时,它会将预期的会话状态建立到 FBSessionStateOpen

【讨论】:

以上是关于为 iOS SDK 迁移 Facebook 身份验证凭据的主要内容,如果未能解决你的问题,请参考以下文章

iOS Facebook SDK:迁移到新版本的问题

是否可以使用 facebook 服务器端身份验证和 facebook ios sdk

无法使用 iOS SDK 和本机 Facebook 应用程序对 Facebook 进行身份验证

以用户身份将照片发布到 Facebook 粉丝页面。 iOS Facebook SDK 3.1

Facebook iOS SDK 和基于 Safari 的身份验证问题

iOS facebook SDK:登录已通过身份验证