gpt4 book ai didi

iphone - Facebook SDK iOS 中的用户未登录错误

转载 作者:可可西里 更新时间:2023-11-01 06:23:49 28 4
gpt4 key购买 nike

如何在我的程序中修复这个错误?使用 Facebook SDK。

Error Domain=facebookErrDomain Code=10000 "The operation couldn’t be completed. (facebookErrDomain error 10000.)" UserInfo=0x5da9b10 {error=<CFBasicHash 0x5db09a0 [0x1087400]>{type = mutable dict, count = 2,
entries =>
2 : <CFString 0x5db7920 [0x1087400]>{contents = "type"} = <CFString 0x5d35420 [0x1087400]>{contents = "OAuthException"}
3 : <CFString 0x5d34970 [0x1087400]>{contents = "message"} = <CFString 0x5da96b0 [0x1087400]>{contents = "Error validating access token: The session is invalid because the user logged out."}
}
}

最佳答案

我认为 enbr 发布的解决方案不完整。我将解释原因:

当 Facebook session 过期并且您继续使用旧访问 token 时,将返回访问 token 错误。注销不是 session 过期的唯一场景(例如,在 Web 中更改登录密码)。因此,在注销后简单地清除用户默认值是不够的。

在客户端,我们不知道我们拥有的访问 token 是否真正有效,直到响应附带此类信息。因此,您需要检测访问 token 错误,并通过清理旧访问 token 和到期日期将 Facebook 实例恢复到工作状态。这样,用户将需要再次登录以获取新的访问 token 。

那么,IMO,你需要做的是:

  1. 处理错误并检测何时发生访问 token 错误。

  2. 发生访问 token 错误时,自动注销并清除用户默认设置以删除旧访问 token (第 3 步)。

  3. 由于注销,您需要清除访问 token 和到期日期的用户默认值(如 enbr 发布的那样)。

这里有一些可用于检测访问 token 错误的代码:

-(BOOL)isAccessTokenError:(NSError *) error {
if ([[error domain] isEqualToString:@"facebookErrDomain"] && [error code] == 10000 ) {
NSDictionary *userInfo = [error userInfo];
NSDictionary *errorAsDictionary = [userInfo objectForKey:@"error"];
if ([[errorAsDictionary objectForKey:@"type"] isEqualToString:@"OAuthException"]) {
//Invalid access token
return YES;
}
}
if ([[error domain] isEqualToString:@"facebookErrDomain"] && ([error code] == 110 || [error code] == 190)) {
//Error accessing access token
return YES;
}
return NO;
}

处理此类错误的地方是:

- (void)request:(FBRequest*)request didFailWithError:(NSError*)error; 
- (void)dialog:(FBDialog*)dialog didFailWithError:(NSError *)error;

希望对您有所帮助。

更新:我忘了提。如果您正在使用 SSO 功能(最有可能),我认为在登录前清除 facebook cookie 是一个非常好的主意。有时,在出现无效访问 token 错误后,除非执行“干净登录”,否则登录似乎不会将 Facebook 对象恢复到工作状态(有效访问 token )。虽然并不总是有效。

此外,如果您没有使用 SSO 功能,这用于修复出现的 ghost 登录弹出窗口再次自动消失。

这是我清理 cookie 的方式:

NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:
[NSURL URLWithString:@"http://login.facebook.com"]];
for (NSHTTPCookie* cookie in facebookCookies) {
[cookies deleteCookie:cookie];
}
enter code here

关于iphone - Facebook SDK iOS 中的用户未登录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150595/

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