Facebook 似乎已经更改了 SSO 页面,因此用户无法直接注销/切换帐户。我的意思是:
a) 您安装了任何使用 Facebook SDK 的 iOS 应用程序,例如 Voxer(不是我的应用程序),并且您没有安装了 Facebook 应用程序
b) 您通过 Safari 正常登录
c) 您再次注销并尝试切换用户,但 Safari 上显示的屏幕只允许您再次登录同一用户(确定按钮)。
可以导航到 facebook.com 并在那里注销,但这对大多数用户来说根本不直观。告诉人们安装 Facebook 应用程序也不是很人性化。
我在 developers.facebook.com 或这里都没有发现任何相关信息,我是否遗漏了什么或者我应该提交错误报告吗?
谢谢, 塞巴斯蒂安
最佳答案
我花了一天的大部分时间来解决这个问题。我发现当您使用 SSO 和调用时:
从您的代码调用:
[ Facebook 注销: self ];
Facebook API 方法:
- (void)logout:(id<FBSessionDelegate>)delegate {
self.sessionDelegate = delegate;
[_accessToken release];
_accessToken = nil;
[_expirationDate release];
_expirationDate = nil;
NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"http://login.facebook.com"]];
for (NSHTTPCookie* cookie in facebookCookies) {
[cookies deleteCookie:cookie];
}
if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) {
[_sessionDelegate fbDidLogout];
}
}
facebook API 确实使访问 token 和过期日期变量无效,并尝试删除移动版 Safari cookie,但出于某种原因,可能是 Apple 的错,cookie 并未真正删除。因此,当您下次尝试登录时,您的移动 Safari 将看到该 cookie 并显示:
“您已经授权....按“确定”继续。登录为...。”
在 Facebook 找到修复程序或 Apple 修复其损坏的 API 之前,我们必须通过 Safari 绕过 SSO。以下是我为强制使用旧登录对话框而对 Facebook.m 所做的更改。如果您使用这些更改,它们可能不会永远有效,但我猜它们会持续很长时间。还要确保这适用于最新的 facebook API,我更新到这篇文章的最新版本(2011 年 11 月构建)。
从您的代码调用:
[facebook authorize:permissions];
Facebook API method:
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
// [self authorizeWithFBAppAuth:YES safariAuth:YES];
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}
如果这对您有帮助,请给这个话题和我的帖子评分,以帮助其他人找到它。
关于通过 Safari 的 iOS SSO : Can't log out/switch user any more,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225886/