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

Caching FB iOS SDK自定义令牌缓存问题,caching,facebook-ios-sdk,Caching,Facebook Ios Sdk,我正在尝试使用自定义令牌缓存机制构建一个iOS应用程序。我在设备上向FB进行身份验证,并将FB访问令牌存储在服务器上,与服务器上的会话令牌相对应,然后从服务器发出FB API请求 FB登录工作正常。我可以将令牌缓存到我的服务器上。但真正的问题发生在我下次登录FB后运行应用程序时 这是我用来检查我的应用程序是否登录FB的流程 1) 点击我的服务器上的url以获取我的应用程序的给定会话令牌的FBAccessToken。这是一个异步请求。 2) 异步请求回调被触发。如果存在令牌,请将其缓存在自定义FB

我正在尝试使用自定义令牌缓存机制构建一个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,那么我决定继续使用OpenBehavior方法。但是,即使在服务器上缓存了令牌并且fetchFBAccessTokenData返回FBAccessTokenData对象时,我也会得到FBSessionStateCreatedTokenLoaded而不是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文档中为自定义缓存提供的标准示例来实现我的代码。

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

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

添加权限成功了。现在可以了。请使用有关内部工作方式的相关信息更新您的文档示例。还更新文档,以包含在自定义缓存方案下如何执行注销的详细信息。它的实现非常简单,但会让一些人的生活变得轻松。我们不清楚如何传递额外的权限。如果我传递的信息超过基本信息,则呼叫失败。这里发生了什么事?看看这个链接,你和@truphenix会感到自豪的。在页面底部。添加权限成功。现在可以了。请使用有关内部工作方式的相关信息更新您的文档示例。还更新文档,以包含在自定义缓存方案下如何执行注销的详细信息。它的实现非常简单,但会让一些人的生活变得轻松。我们不清楚如何传递额外的权限。如果我传递的信息超过基本信息,则呼叫失败。这里发生了什么事?看看这个链接,你和@truphenix会感到自豪的。在这一页的底部。