2

有没有人有从旧的 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(即它知道它具有本地保存的属性并准备在线检查)的状态。

为什么会被移除?它针对类方法进行了验证。

谢谢

4

1 回答 1

2

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

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

于 2012-11-01T14:41:50.270 回答