我在这里看到了很多关于Facebook的问题,但是我仍然没有找到一个简单的“登录”/“注销”操作的解决方案。看起来,单一的登录方式造成了更多的混乱而不是好处。
我想知道是否有可能出现以下情况:
accessToken/expirationDate )。authorize:delegate:方法执行使用SSO的登录(应用程序转到后台,登录是在“全局”范围(Facebook /Mobile)中进行的,请求用户凭据。accessToken和expirationDate都保存到NSUserDefaults中)。logout:方法执行注销(现在注销,accessToken和expirationDate都从NSUserDefaults中删除)我意识到,当我调用logout:时,我确实从我的应用程序范围(accessToken是无效的)登录,而不是从global范围(Facebook /Mobile)注销。)在5.)中,当我再次尝试登录时,应用程序会转到后台,并且像往常一样在Facebook /Mobile中再次尝试登录,但是我会看到一个屏幕显示我已经登录了:
你已经授权了
...。按“好”继续。以...身份登录(而不是您?)。
对于刚刚登录到我的应用程序中的用户来说,这是一种奇怪的行为。我的问题是:
“我真的可以在我的应用程序中从facebook (我的意思是‘全局’范围)登录吗?这也会影响使用facebook凭证的其他应用程序。然而,如果我做不到这一点,我如何避免上面描述的‘奇怪行为’?”
谢谢
发布于 2011-06-03 12:49:22
恐怕答案是否定的,你不能这样做。
您的应用程序位于沙箱中,不能在外部编写,而全局cookie(用于移动狩猎)和Facebook应用程序设置(我认为是在Facebook应用程序首选项/cookie中)。
你只能警告你的用户退出你的应用程序.
...Or你不能使用facebook,但是在应用程序登录webform中,就像我出于其他原因一样。
如果您选择该选项,此拉请求可能会节省您一些时间;)
发布于 2011-12-01 18:23:24
爱德华多
我感觉到你的痛苦!我花了一天的大部分时间来研究这个问题。我发现当您使用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确实使访问令牌和过期变量失效,并试图删除移动Safari cookie,但出于某种原因,可能是Apple的错误--cookie没有被真正删除。因此,当您下一次尝试登录移动Safari时,会看到cookie,它说:
"You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?)."除非Facebook找到一个修复程序,或者苹果修复了他们的坏API,否则我们必须通过Safari绕过SSO。下面是我对Facebook.m所做的更改,以强制使用旧的登录对话框。如果您使用这些更改,它们可能不会永远工作,但我猜它们将在很长一段时间内工作。此外,为了确保这与最近的facebook工作,我更新到最新的这篇文章(2011年11月的构建)。
从代码中调用:
[facebook authorize:permissions];Facebook API方法:
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
// [self authorizeWithFBAppAuth:YES safariAuth:YES];
[self authorizeWithFBAppAuth:NO safariAuth:NO];
},如果这能帮助你提高这个帖子和我的帖子的评级,帮助其他人找到它.
加迪尔达菲
发布于 2011-06-03 13:24:16
嗨,
这是不可能的,原因是单点登录(SSO)不是每次都让用户登录,而是如果用户登录到FB启用的应用程序中--它将再次使用它--这是因为该设备主要由单身用户使用--在这种情况下,只有一个用户可以在Facebook上登录。
您无法控制应用程序之外的任何应用程序-例如,如果您使用Gmail登录&当您打开google.com时,您可以看到您的用户名正在登录,其中包含单点登录。
https://stackoverflow.com/questions/6226950
复制相似问题