为 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 身份验证凭据的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 facebook 服务器端身份验证和 facebook ios sdk
无法使用 iOS SDK 和本机 Facebook 应用程序对 Facebook 进行身份验证
以用户身份将照片发布到 Facebook 粉丝页面。 iOS Facebook SDK 3.1