首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >facebook-ios-sdk注销问题

facebook-ios-sdk注销问题
EN

Stack Overflow用户
提问于 2011-06-03 12:14:24
回答 7查看 22.8K关注 0票数 12

我在这里看到了很多关于Facebook的问题,但是我仍然没有找到一个简单的“登录”/“注销”操作的解决方案。看起来,单一的登录方式造成了更多的混乱而不是好处。

我想知道是否有可能出现以下情况:

  1. 输入应用程序(没有创建accessToken/expirationDate )。
  2. 通过调用authorize:delegate:方法执行使用SSO的登录(应用程序转到后台,登录是在“全局”范围(Facebook /Mobile)中进行的,请求用户凭据。
  3. 输入应用程序(现在登录,accessTokenexpirationDate都保存到NSUserDefaults中)。
  4. 通过调用logout:方法执行注销(现在注销,accessTokenexpirationDate都从NSUserDefaults中删除)
  5. 试图再次执行登录,在2.中执行的步骤完全相同。

我意识到,当我调用logout:时,我确实从我的应用程序范围(accessToken是无效的)登录,而不是从global范围(Facebook /Mobile)注销。)在5.)中,当我再次尝试登录时,应用程序会转到后台,并且像往常一样在Facebook /Mobile中再次尝试登录,但是我会看到一个屏幕显示我已经登录了:

你已经授权了...。按“好”继续。以...身份登录(而不是您?)。

对于刚刚登录到我的应用程序中的用户来说,这是一种奇怪的行为。我的问题是:

“我真的可以在我的应用程序中从facebook (我的意思是‘全局’范围)登录吗?这也会影响使用facebook凭证的其他应用程序。然而,如果我做不到这一点,我如何避免上面描述的‘奇怪行为’?”

谢谢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-06-03 12:49:22

恐怕答案是否定的,你不能这样做。

您的应用程序位于沙箱中,不能在外部编写,而全局cookie(用于移动狩猎)和Facebook应用程序设置(我认为是在Facebook应用程序首选项/cookie中)。

你只能警告你的用户退出你的应用程序.

...Or你不能使用facebook,但是在应用程序登录webform中,就像我出于其他原因一样。

如果您选择该选项,此拉请求可能会节省您一些时间;)

票数 3
EN

Stack Overflow用户

发布于 2011-12-01 18:23:24

爱德华多

我感觉到你的痛苦!我花了一天的大部分时间来研究这个问题。我发现当您使用SSO和调用时:

从代码中调用

代码语言:javascript
复制
[facebook logout:self];

Facebook API方法:

代码语言:javascript
复制
- (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,它说:

代码语言:javascript
复制
"You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?)."

除非Facebook找到一个修复程序,或者苹果修复了他们的坏API,否则我们必须通过Safari绕过SSO。下面是我对Facebook.m所做的更改,以强制使用旧的登录对话框。如果您使用这些更改,它们可能不会永远工作,但我猜它们将在很长一段时间内工作。此外,为了确保这与最近的facebook工作,我更新到最新的这篇文章(2011年11月的构建)。

从代码中调用

代码语言:javascript
复制
[facebook authorize:permissions];

Facebook API方法:

代码语言:javascript
复制
- (void)authorize:(NSArray *)permissions {
  self.permissions = permissions;

//  [self authorizeWithFBAppAuth:YES safariAuth:YES];
    [self authorizeWithFBAppAuth:NO safariAuth:NO];
}

,如果这能帮助你提高这个帖子和我的帖子的评级,帮助其他人找到它.

加迪尔达菲

票数 13
EN

Stack Overflow用户

发布于 2011-06-03 13:24:16

嗨,

这是不可能的,原因是单点登录(SSO)不是每次都让用户登录,而是如果用户登录到FB启用的应用程序中--它将再次使用它--这是因为该设备主要由单身用户使用--在这种情况下,只有一个用户可以在Facebook上登录。

您无法控制应用程序之外的任何应用程序-例如,如果您使用Gmail登录&当您打开google.com时,您可以看到您的用户名正在登录,其中包含单点登录。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6226950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档