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 iOS SDK 注销

如何在 ios sdk 中从 facebook 注销

与 Facebook iOS SDK 共享后从 Facebook 注销

使用 facebook SDK for ios 6 实现 Facebook 注销

以编程方式从 iOS 中的 facebook SDK 注销