gpt4 book ai didi

ios - Facebook SDK 更新 - 缓存访问 token 问题

转载 作者:行者123 更新时间:2023-11-28 20:14:28 26 4
gpt4 key购买 nike

我阅读了几篇关于这个问题的帖子,但找不到解决我的问题的方法。

基本上我有适用于 iOS 的 Facebook SDK“3.1.1”,我将代码更新到版本“3.5.3”。

我使用以下代码来使用缓存的访问 token :

登录后:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:accessToken forKey:FBAccessTokenKey];
[defaults setObject:expirationDate forKey:FBExpirationDateKey];
[defaults synchronize];

下次我使用之前保存的数据时:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id accessToken = [defaults objectForKey:FBAccessTokenKey];
id expirationDate = [defaults objectForKey:FBExpirationDateKey];
if (accessToken && expirationDate) {
facebook.accessToken = accessToken;
facebook.expirationDate = expirationDate;
}

[[FBSession activeSession] isOpen];

但现在我不能使用相同的代码,因为新的 SDK 使用 FBAccessTokenData,所以我有这个新代码来获取旧 session :

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id accessToken = [defaults objectForKey:FBAccessTokenKey];
id expirationDate = [defaults objectForKey:FBExpirationDateKey];

if (accessToken && expirationDate) {
FBAccessTokenData* accessTokenData = [FBAccessTokenData createTokenFromString:accessToken permissions:nil expirationDate:expirationDate loginType:FBSessionLoginTypeFacebookApplication refreshDate:nil];
// add the old token to the cache
[FBSessionTokenCachingStrategy.defaultInstance cacheFBAccessTokenData:accessTokenData];
[defaults removeObjectForKey:FBAccessTokenKey];
[defaults removeObjectForKey:FBExpirationDateKey];
[defaults synchronize];
}

// to login explicitly
[FBSession openActiveSessionWithReadPermissions:@[ @"email", @"user_location", @"user_birthday" ] allowLoginUI:NO completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self session:session updatedState:state withError:error];
}];

我在这里是因为最后一个代码不起作用,我尝试使用 nil 而不是传递权限,但我得到了相同的结果,我必须再次登录并获得一个新 token 。但我只想获取旧 session ,而不是再次为用户显示登录弹出窗口。

在此先感谢您的帮助,

问候

最佳答案

我遇到了同样的问题。

您正在请求特殊权限 user_birthday,如果您在没有让 facebook 审核您的 facebook 应用程序的情况下这样做,您将不会收到此信息,并且(有意或无意)您的 session 将不会缓存。这意味着您的 activeSession 将是 FBSessionStateCreated 而不是 FBSessionStateCreatedTokenLoaded

请注意,如果您正在测试的 Facebook 帐户同时也是 Facebook 应用程序的管理员或开发人员,那么它应该可以正常工作,因为尽管您的应用程序未经过 Facebook 审核,您仍将获得“user_birthday”。

要解决此问题,您可以删除对 user_birthday 的需求,或者让 facebook 审核您的应用。如果您要使用第一个解决方案,请不要忘记从 Facebook 取消对您的应用程序的授权。

关于ios - Facebook SDK 更新 - 缓存访问 token 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18576664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com