FB iOS SDK自定义令牌缓存问题

时间:2013-09-05 17:08:29

标签: caching facebook-ios-sdk

我正在尝试使用自定义令牌缓存机制构建iOS应用程序。我在设备上对FB进行身份验证,然后将FB访问令牌存储在服务器上的会话令牌上,然后从服务器发出FB API请求。

FB登录正常。我能够将令牌缓存到我的服务器上。但是当我登录FB后下次运行应用程序时,真正的问题就出现了。

这是我检查我的应用是否已登录FB的流程。

1)在我的服务器上点击一个url,为我的应用程序获取给定会话令牌的FBAccessToken。这是一个异步请求。 2)触发异步请求回调。如果存在令牌,请将其缓存在我的自定义FBSessionTokenCachingStrategy类中。 3)在回调中,我使用:

初始化FBSession对象
FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:@[@"basic_info"] urlSchemeSuffix:nil tokenCacheStrategy:self.tokenCache];

然后,我检查session.state。如果我得到一个FBSessionCreatedTokenLoaded,那么我决定继续使用openBehaviour方法。但是,即使在服务器上缓存了令牌并且fetchFBAccessTokenData返回FBAccessTokenData对象,我也会获得FBSessionStateCreated而不是FBSessionStateCreatedTokenLoaded。

不知道为什么会这样?

这是我自定义FBSessionTokenCachingStrategy类的fetchFBAccessTokenData方法的实现:

-(FBAccessTokenData*) fetchFBAccessTokenData {

    NSLog(@"Fetching FB Access token");

    if (self.fbTokenData != nil) {
        NSLog(@"Found FB Token");

        FBAccessTokenData *fbTokenData = [FBAccessTokenData createTokenFromString:    [self.fbTokenData objectForKey:@"fb_token"] permissions:nil expirationDate:nil loginType:1 refreshDate:nil];

        NSLog(@"%@",fbTokenData.accessToken);

        return fbTokenData;
    }
    return nil;
}

它返回一个FBAccessTokenData对象,但我仍然得到一个不正确的会话状态。

是否会发生这种情况,因为我没有正确返回缓存的令牌?我正在基于FB IOS SDK文档中为自定义缓存提供的标准示例实现我的代码。

1 个答案:

答案 0 :(得分:1)

看起来您的策略是返回一个没有权限的FBAccessTokenData(除非您同时存储权限,否则这对您的目的来说并非完全不合理)。但是,当您初始化会话时,指定“basic_info”(虽然通常是一个很好的最佳实践,并且在请求登录时需要提示UI)将导致它检查缓存令牌中是否包含“basic_info”。由于它不是,它不会加载缓存的令牌。出于您的目的,您应该能够使用nil权限数组初始化会话。