Edu*_*lho 12 iphone facebook logout facebook-graph-api ios4
我在这里看到了很多关于Facebook Graph API的问题,但我仍然没有找到使用它进行简单"登录"/"注销"操作的解决方案.看起来单一登录风格造成的混乱比利益更多.
我想知道是否有可能出现以下情况:
accessToken
/ expirationDate
创建).authorize:delegate:
方法使用SSO执行登录(应用程序进入后台,登录在"全局"范围(Facebook App/Mobile Safari)中进行,请求用户凭据.accessToken
和expirationDate
保存到NSUserDefaults
).logout:
方法(现在已经退出,都accessToken
和expirationDate
从被删除NSUserDefaults
)我意识到,当我打电话时logout:
,我确实accessToken
从我的App范围注销Facebook(无效),而不是从global
范围(Facebook App/Mobile Safari)注销.在5.)当我尝试再次登录时,应用程序转到后台,并且像往常一样在Facebook App/Mobile Safari中再次登录尝试,但是我得到一个屏幕,说我已经登录:
你已经授权了
...
.按"好"继续.登录为...
(不是吗?).
对于刚刚在我的应用程序中注销的用户来说,这是一种奇怪的行为.我的问题是:
"我可以从我的应用程序内部真正退出facebook(我的意思是'全球'范围)吗?这会影响使用facebook凭据的其他应用程序.但是,如果我不能这样做,我怎么能避免'奇怪'行为'在上面描述?
谢谢
gad*_*ssh 13
爱德华多,
我感觉到你的痛苦!我花了一天的时间来处理这个问题.我发现当你使用SSO和电话时:
从您的代码中调用:
[facebook logout:self];
Run Code Online (Sandbox Code Playgroud)
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];
}
}
Run Code Online (Sandbox Code Playgroud)
facebook API确实使访问令牌和expirationdate变量无效并尝试删除移动Safari cookie,但由于某种原因,可能是Apple的错误,cookie并未真正删除.因此,当您下次尝试登录时,您的移动版Safari将会看到该Cookie,并显示:
"You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?)."
Run Code Online (Sandbox Code Playgroud)
在Facebook找到修复程序或Apple修复其破坏的API之前,我们必须通过Safari绕过SSO.以下是我对Facebook.m所做的更改,以强制使用旧的登录对话框.如果您使用这些更改,它们可能无法永久工作,但我猜他们将会工作很长时间.另外,为了确保这适用于最新的facebook API,我更新到本文(2011年11月版)的最新版本.
从您的代码中调用:
[facebook authorize:permissions];
Run Code Online (Sandbox Code Playgroud)
Facebook API方法:
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
// [self authorizeWithFBAppAuth:YES safariAuth:YES];
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}
Run Code Online (Sandbox Code Playgroud)
如果这有助于你请高举这个帖子和我的帖子,以帮助其他人找到它.
gadildafissh
恐怕答案是否定的,你不能这样做。
您的应用程序位于沙箱中,无法在外部写入,其中全局 cookie(用于移动 Safari)和 Facebook 应用程序设置(我认为在 Facebook 应用程序首选项/cookies 中)
您只能警告您的用户在您的应用程序之外注销...
...或者您可以不使用 facebook api SSO,而是在应用程序登录 Web 表单中使用,就像我出于其他原因所做的那样。
如果您选择该选项,此拉取请求可能会为您节省一些时间;)
归档时间: |
|
查看次数: |
22292 次 |
最近记录: |