在 Facebook-Ios-Sdk 中关闭 Facebook 会话

Posted

技术标签:

【中文标题】在 Facebook-Ios-Sdk 中关闭 Facebook 会话【英文标题】:Close Facebook session in Facebook-Ios-Sdk 【发布时间】:2013-01-21 04:56:22 【问题描述】:

我如何在每次启动我的应用程序时关闭Facebook-ios-Sdk 的活动会话,或者在杀死应用程序后它会为我提供以前的登录会话详细信息。当我点击 facebook 按钮时。我已经使用了所有东西 [appDelegate.session closeAndClearTokenInformation]; [FBSession.activeSession close]; [FBSession.activeSession closeAndClearTokenInformation] ..但活动会话仍未关闭..如何在单击时关闭上一个会话数据。

我使用下面的代码来清除,但是每当我点击 facebook 按钮开始新会话时..它会给我以前的凭据。

- (IBAction)buttonClickHandler:(id)sender 

appDelegate = [[UIApplication sharedApplication]delegate];

// this button's job is to flip-flop the session from open to closed
if (appDelegate.session.isOpen) 

    [appDelegate.session closeAndClearTokenInformation];
    [FBSession.activeSession close];
    [FBSession.activeSession  closeAndClearTokenInformation];
    FBSession.activeSession=nil;

 else 
    if (appDelegate.session.state != FBSessionStateCreated) 
        // Create a new, logged out session.
        appDelegate.session = [[FBSession alloc] init];
    

    // if the session isn't open, let's open it now and present the login UX to the user
    [FBSession.activeSession closeAndClearTokenInformation];
    FBSession.activeSession=nil;
    [FBSession.activeSession openWithBehavior:FBSessionLoginBehaviorForcingWebView

                            completionHandler:^(FBSession *session,

                                                FBSessionState state,

                                                NSError *error) 
                                // and here we make sure to update our UX according to the new session state

                                NSLog(@" state=%d",state);

                                [FBRequestConnection
                                 startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                                                   id<FBGraphUser> user,
                                                                   NSError *error) 

                                     userInfo = @"";

                                     // Example: typed access (name)
                                     // - no special permissions required
                                     userInfo = user.username;

                                     NSLog(@"string %@", userInfo); 
                                          [self checkfacebook];

                                 ];


                            ];     


 

并在 ViewDidLoad

- (void)viewDidLoad

[super viewDidLoad];





AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
if (!appDelegate.session.isOpen) 
    // create a fresh session object
    appDelegate.session = [[FBSession alloc] init];


    if (appDelegate.session.state == FBSessionStateCreatedTokenLoaded) 
        // even though we had a cached token, we need to login to make the session usable
        [FBSession.activeSession close];
        FBSession.activeSession=nil;
   




NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"http://login.facebook.com"]];

for (NSHTTPCookie* cookie in facebookCookies) 
    [cookies deleteCookie:cookie];
    



【问题讨论】:

【参考方案1】:

你好克里斯蒂安可能是下面两个链接它的帮助你请转发developers.facebook的这两个链接

http://developers.facebook.com/docs/reference/ios/3.0/class/FBSession/

http://developers.facebook.com/docs/reference/ios/3.0/class/FBSession/#close

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];

您还可以检查与您的问题相关的这两个问题:-

Facebook graph api log out not working

Facebook iOS SDK 3.1.1 "closeAndClearTokenInformation" method no working

希望对你有帮助

【讨论】:

谢谢伙计!我已经尝试了所有的事情,但这种奇怪的事情一次又一次地发生:( ... 这对于 fb api 来说确实很奇怪。我有同样的“问题”。顺便说一句,当您从 facebook 应用程序(设备上的实际 fb 应用程序)注销时,您就真正注销了。如果您仅在您的应用程序(而不是 fb 应用程序)中注销,您将使用您在 fb 应用程序中使用的帐户使用 sso 登录... 对我来说也很完美!!非常感谢 NitinGohel 先生 我已经使用了以上 3 行。它在 iOS8 中崩溃。【参考方案2】:

调用后

    [FBSession.activeSession closeAndClearTokenInformation];

使用以下内容清除 cookie。它对我有用!

     NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie* cookie in
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) 
    [cookies deleteCookie:cookie];

【讨论】:

单击登录按钮时不会清除旧会话。它总是带我到“您已经授权应用名称”屏幕。 @SonnyG 你能找到解决这个问题的办法吗?【参考方案3】:

Nitin 的 Gohel 答案,Swift 版本:

    FBSession.activeSession().closeAndClearTokenInformation()
    FBSession.activeSession().close()
    FBSession.setActiveSession(FBSession())

你可以使用

    FBSession.setActiveSession(nil)

但是该函数要求一个未包装的对象,所以“nil”似乎不是一个很好的传递参数

【讨论】:

以上是关于在 Facebook-Ios-Sdk 中关闭 Facebook 会话的主要内容,如果未能解决你的问题,请参考以下文章

在 UIViewController 中关闭键盘

在 windows 中关闭显示器

如何在线程中关闭 QWebSocket?

检查在java中关闭的游标

如何在导航控件片段中关闭导航 DrawerLayout onBackPressed

在 python 的运行脚本中关闭 GPU