facebook 无法在 ios 应用程序中正确注销。无法切换用户

Posted

技术标签:

【中文标题】facebook 无法在 ios 应用程序中正确注销。无法切换用户【英文标题】:facebook does not logout properly in ios app.cannot switch users 【发布时间】:2015-05-13 07:05:50 【问题描述】:

我正在使用 fb sdk 提供的 facebook 登录按钮在我的应用程序中实现 facebook 登录。当我注销时,facebook 按钮确实会再次更改回登录。但是当我点击它时,safari 应用程序会打开显示“您已经授权该应用程序”单击确认或取消。实际上我需要这里的 facebook 登录名和密码屏幕。我无法切换用户,直到我重置模拟器。如何在每次我注销时以编程方式重置 safari 中的内容,以便每次都会显示登录屏幕。

请注意,当我手动清除 safari 的网站数据时,它会再次显示登录页面。是否可以通过编程方式完成。

我用于登录的代码如下

//creating the login button
 FBLoginView *loginView =
    [[FBLoginView alloc] initWithReadPermissions:
     @[@"public_profile", @"email", @"user_friends"]];
    loginView.frame=CGRectMake(50, 500, 225, 55);
    loginView.delegate=self;
    [self.view addSubview:loginView];

//delegate method when logged in
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                            user:(id<FBGraphUser>)user 


    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:[user objectForKey:@"id"] forKey:@"LoggedInUserID"] ;


    [self checkandsaveNewUserInBackend:user];




  [self performSegueWithIdentifier:@"Login" sender:self];






//logout code
- (IBAction)logoutButtonPressed:(id)sender 

    [FBSession.activeSession closeAndClearTokenInformation];


    [self.navigationController popToRootViewControllerAnimated:YES];

【问题讨论】:

你的问题解决了吗 是的,但结果和以前一样……fb web ui 使登录用户会话保持活动状态……因此无法切换配置文件 【参考方案1】:

试试这个用户点击注销并删除存储在 userdefault/cookies 中的所有密钥

  NSLog(@"Logged out 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];
   

【讨论】:

要求是从 safari 中清除 cookie,而不是从应用中清除【参考方案2】:

试试这个……

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

可能对你有用...

为了从浏览器中清除 cookie...点击此链接 \

http://www.iossnippet.com/snippets/web/how-to-delete-cookies-nshttpcookie-in-objective-c-ios/

【讨论】:

来自应用程序的登录详细信息正在执行,但 safari 仍在保留一些 cookie 或会话在 safari 中仍处于活动状态,因此它仍然显示“您已经授权该应用程序”。它不会去到登录屏幕 你以编程方式...你知道吗[NSHTTPCookieStorage sharedHTTPCookieStorage] 您的两个答案都是正确的...按照您的要求进行操作 实际上要求是清除 safari 中的 cookie,而不是在应用程序内。您提供的代码是用于应用程序中的 cookie【参考方案3】:

//logout code
- (IBAction)logoutButtonPressed:(id)sender  

使用以下代码

 if (FBSession.activeSession.state == FBSessionStateOpen
        || FBSession.activeSession.state == FBSessionStateOpenTokenExtended) 



    // Close the session and remove the access token from the cache
    // The session state handler (in the app delegate) will be called automatically
    [FBSession.activeSession closeAndClearTokenInformation];

    // If the session state is not any of the two "open" states when the button is clicked
 else 
    // Open a session showing the user the login UI
    // You must ALWAYS ask for public_profile permissions when opening a session
    [FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session, FBSessionState state, NSError *error) 
             ];

【讨论】:

以上是关于facebook 无法在 ios 应用程序中正确注销。无法切换用户的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK - 设置控制器的正确方法是啥

ios 6 - 在应用程序中发布到 Facebook 无法在设备上运行

如何使用 React Native 为 IOS 正确安装 Facebook 广告

无法在 ios 8 的 facebook 上共享自动文本。

Facebook:iOS 应用程序中出现“无法点赞 URL,因为它已被阻止”错误

在 iOS 8 中无法从 Facebook 获取用户的电子邮件个人信息