facebook iOS sdk的登录注销问题
Posted
技术标签:
【中文标题】facebook iOS sdk的登录注销问题【英文标题】:Login Logout issue with facebook iOS sdk 【发布时间】:2012-02-25 00:19:42 【问题描述】:我们对 ios facebook 登录注销问题感到不满。当我使用我的应用程序登录 Facebook 时,它会提示用户使用“登录”和“取消”按钮获得许可。但是这个屏幕只在第一次出现。即,一旦我们使用 safari 或应用程序登录,即使我们从 facebook 注销,应用程序提示用户权限的屏幕也只会显示一个“确定”按钮。它不允许以其他用户身份登录。为什么每次启动应用程序时都不显示带有“登录”和“取消”按钮的屏幕?我尝试删除 cookie 并删除 NSUserDefaults 但没有运气。
问题是注销后,我无法以其他用户身份登录 Facebook。它仍然显示为同一用户。
我在sdk中调用下面的注销函数
(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];
同样在 fbDidLogout 委托函数中,我删除了所有 NSUserDefaults 对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"])
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];
抱歉 希哈布
【问题讨论】:
您能写出如何实现您的注销方法以及您使用哪些委托吗?也许我可以帮助你,我也一直在为 facebook 苦苦挣扎。 抱歉,我无法附上屏幕截图。我面临的问题是即使从我的应用程序注销后,我也无法以其他用户身份登录。我希望,注销后,当我尝试再次登录系统时,应该有一个链接可以从 facebook 用户名密码窗口注销。我在一些 iOS Facebook 应用程序中看到了同样的情况。 您找到解决方案了吗?我也面临同样的问题。 无法以其他用户身份登录,因为 facebook 已全局登录到您的设备,您无法从您的应用程序中将某人从 facebook 注销 【参考方案1】:登录时设置为loginBehavior,这样退出时,用其他账号登录,不会出现只授权,没有登录画面 login.loginBehavior =FBSDKLoginBehaviorWeb;我使用 facebook 4.11,它的工作
【讨论】:
【参考方案2】:FBSession openWithBehavior:completionHandler: 可以用..
FBSession *fbSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"email",@"publish_actions",@"publish_stream", nil]];
[fbSession openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session,FBSessionState state, NSError *error)
[FBSession setActiveSession:fbSession]; // Retain the Active Session.
];
对于注销,Ellen S.. 的 Ans 在 iOS 上运行良好。
【讨论】:
您好我有一些问题我有同样的问题我的注销已成功完成,因为我无法获得新用户的登录屏幕【参考方案3】:您可以使用以下代码清除会话以及清除 cookie:
FBSession* session = [FBSession activeSession];
[session closeAndClearTokenInformation];
[session close];
[FBSession setActiveSession:nil];
NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"https://facebook.com/"]];
for (NSHTTPCookie* cookie in facebookCookies)
[cookies deleteCookie:cookie];
【讨论】:
如果你在 iOS 上,当你已经 closeAndClearTokenInformation 时,你不需要关闭会话并将活动会话设置为 nil。如果您这样做,您必须单击两次才能登录。 同意@AtifImran。只有closeAndClearTokenInformation
才能完成这项工作。【参考方案4】:
我修改了 fbDidLogout 方法并且成功了,代码如下:
-(void) fbDidLogout
NSLog(@"Logged out of facebook");
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"facebook"];
if(domainRange.length > 0)
[storage deleteCookie:cookie];
//End of Method
该方法成功注销用户。 希望这会有所帮助!
【讨论】:
【参考方案5】:我只是发现我进入了我的 iPhone 的设置并获得了隐私选择 Facebook 选项卡并关闭它显示已请求访问您的 Facebook 帐户的应用程序将出现在此处。有用!!!
【讨论】:
以上是关于facebook iOS sdk的登录注销问题的主要内容,如果未能解决你的问题,请参考以下文章
与 Facebook iOS SDK 共享后从 Facebook 注销