Facebook似乎更改了SSO页面,因此用户无法直接注销/切换帐户。我的意思是:
a)您安装了任何使用Facebook SDK的iOS应用程序,例如Voxer(不是我的应用程序),而您确实不安装了Facebook App b)您通过Safari正常登录 c)您再次注销并尝试切换用户,但Safari上显示的屏幕只允许您再次登录同一用户(确定按钮)。
可以导航到facebook.com并在那里注销,但对大多数用户来说这根本不直观。告诉人们安装Facebook应用程序也不是非常用户友好。
我在developers.facebook.com上或者在这里找不到任何相关内容,我错过了什么或者我应该提交错误报告吗?
谢谢, 塞巴斯蒂安
答案 0 :(得分:2)
我花了一天的时间来处理这个问题。我发现当你使用SSO和电话时:
从您的代码中调用:
[facebook logout: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确实使访问令牌和expirationdate变量无效并尝试删除移动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];
}
如果这对您有帮助,请为此主题和我的帖子评分,以帮助其他人找到它。