有没有人有任何提示从旧的iOS FB SDK(在他们的GitHub帐户上托管的SDK)迁移到他们的.framework(基于包的安装程序)?我在获取现有的auth令牌和到期日期对象以解决新的FBSession对象时遇到问题。
情况:
在旧的SDK /技术中,Facebook iOS SDK要求您保存auth等内容。通过您自己的存储机制手动设置令牌和到期日期。在基于新框架的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
的状态(即它知道)它具有本地保存的属性,可以在线检查。
为什么要删除它?它验证了类方法。
由于
答案 0 :(得分:2)
事实证明,较新的Facebook SDK的本地存储对象也保留了与令牌相关的权限列表。这是不需要的,所以当我没有在本地保存时,我的权限列表没有改变。所以我所做的还是将权限列表保存到新的存储对象中(总共3个密钥:auth。令牌,到期日期和权限列表)。
完成此操作后,创建/初始化FBSession
对象并未删除我本地存储的对象,并且在调用openWithCompletionHandler:
时,它将预期的会话状态建立为FBSessionStateOpen
。