[英]Utilize the Facebook SDK Login (iOs/Android) for being logged into Facebook @ Web?
[英]User not logged in error in Facebook SDK iOS
如何在程序中修复此错误? 使用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."}
}
}
我认为发布的解决方案并不完整。 我将解释原因:
当Facebook会话到期并且您继续使用旧的访问令牌时,将返回访问令牌错误。 注销不是会话到期的唯一方案(例如,更改Web中的登录密码)。 因此,仅在注销后清除用户默认值是不够的。
从客户端,我们不知道我们拥有的访问令牌是否实际有效,直到响应带有此类信息。 因此,您需要检测访问令牌错误,并通过清除旧访问令牌和到期日期将Facebook实例恢复到工作状态。 这样,用户将需要再次登录以获取新的访问令牌。
那么,IMO,你需要做的是:
处理错误并检测何时发生访问令牌错误。
发生访问令牌错误时,自动注销并清除用户默认设置以删除旧访问令牌(步骤3)。
作为注销的结果,您需要清除访问令牌和到期日期的用户默认值(如发布的那样)。
这里有一些可用于检测访问令牌错误的代码:
-(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 cookies是个好主意。 有时,在无效访问令牌错误之后,似乎登录不会将Facebook对象恢复到工作状态(有效访问令牌),除非执行“干净登录”。 虽然不总是有用。
此外,如果您没有使用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
我刚刚也遇到了这个错误。 这是解决方案。 将此代码放在主FBSessionDelegate(可能是您的app委托)中。
- (void)fbDidLogout {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
然后删除并重新安装应用程序!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.