Facebook iOS sdk登录注销问题

时间:2012-02-02 10:29:32

标签: ios facebook login logout

我们在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];
}

regrds 谢哈布

5 个答案:

答案 0 :(得分:7)

您可以使用以下代码清除会话以及清除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];
}

答案 1 :(得分:5)

我修改了 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

该方法成功注销用户。 希望这会有所帮助!

答案 2 :(得分:5)

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.        
}];

对于Logging out,Ellen S的Ans适用于iOS。

答案 3 :(得分:2)

我只是弄明白我已经进入我的iPhone设置并获得隐私选择了Facebook标签并关闭它所说的请求访问你的Facebook帐户的应用程序将出现在这里。有用!!!

答案 4 :(得分:0)

当登录设置为loginBehavior时,所以退出时,与其他帐户登录,不会出现授权,没有登录界面login.loginBehavior = FBSDKLoginBehaviorWeb;我使用facebook 4.11,它的工作