gpt4 book ai didi

iphone - facebook-ios-sdk 注销问题

转载 作者:行者123 更新时间:2023-11-30 05:16:51 26 4
gpt4 key购买 nike

我在这里看到了很多关于 Facebook Graph API 的问题,但我仍然没有找到使用它进行简单“登录”/“注销”操作的解决方案。看起来单点登录风格造成的困惑多于好处。

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

  1. 进入应用程序(未创建accessToken/expirationDate)。
  2. 通过调用 authorize:delegate: 方法使用 SSO 执行登录(应用程序进入后台并在“全局”范围(Facebook 应用程序/移动 Safari)中进行登录,询问用户凭据.
  3. 返回应用程序(现在已登录,accessTokenexpirationDate 都保存到 NSUserDefaults)。
  4. 通过调用 logout: 方法执行注销(现在已注销,accessTokenexpirationDate 都从 NSUserDefaults< 中删除)
  5. 尝试再次执行登录,执行与 2 中完全相同的步骤。

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

You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?).

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

“我可以真的从我的应用程序内部退出 facebook(我的意思是‘全局’范围)吗?这也会影响使用 facebook 凭据的其他应用程序。但是,如果我不能这样做,我怎样才能避免上述“奇怪的行为”?

谢谢

最佳答案

爱德华多,

我感受到了你的痛苦!我花了一天的大部分时间来解决这个问题。我发现当您使用 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 确实使访问 token 和过期日期变量无效,并尝试删除移动版 Safari cookie,但出于某种原因,可能是 Apple 的错,cookie 并未真正删除。因此,当您下次尝试登录时,您的移动 Safari 将看到该 cookie 并显示:

"You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?)."

在 Facebook 找到修复程序或 Apple 修复其损坏的 API 之前,我们必须通过 Safari 绕过 SSO。以下是我为强制使用旧登录对话框而对 Facebook.m 所做的更改。如果您使用这些更改,它们可能不会永远有效,但我猜它们会持续很长时间。还要确保这适用于最新的 facebook API,我更新到这篇文章的最新版本(2011 年 11 月构建)。

从您的代码调用:

[facebook authorize:permissions];

Facebook API 方法:

- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;

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

如果这对您有帮助,请给这个话题和我的帖子评分,以帮助其他人找到它。

加迪尔达菲什

关于iphone - facebook-ios-sdk 注销问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6226950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com