【问题标题】:Facebook logout not working properly through the Facebook Connect iPhone APIFacebook 注销无法通过 Facebook Connect iPhone API 正常工作
【发布时间】:2012-03-28 05:34:54
【问题描述】:

我正在执行以下代码以从我的 iPhone 应用程序中注销 Facebook:

if ([mFacebook isSessionValid]) {
    [mFacebook logout];
}

此代码成功运行,之后调用委托,我正在清除访问令牌:

- (void)fbDidLogout 
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults removeObjectForKey:@"FBAccessTokenKey"];
    [defaults removeObjectForKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}

但是当我再次登录 Facebook 时,它并没有要求输入用户名和密码。

我做错了什么?

【问题讨论】:

  • 这些方法是否被调用?您在哪里为注销按钮编写了代码?
  • 是的,这些方法被成功调用,但是当我登录时,我没有被要求输入用户名和密码。它直接表示您以“SampleName”身份登录。理想情况下,它应该询问用户名和密码。如果我卸载该应用程序,它会要求提供凭据。
  • 如果您可以粘贴所有代码以进行 facebook 集成,那就更好了。

标签: iphone ios facebook ipad


【解决方案1】:

您使用的是 FB 移动登录对话框吗?在 Facebook.m 中,添加以下代码以删除 m.facebook.com 域中的 cookie。

- (void)invalidateSession {

   ...
    NSArray* facebookMCookies = [cookies cookiesForURL:
                                [NSURL URLWithString:@"https://m.facebook.com"]];

    for (NSHTTPCookie* cookie in facebookMCookies) {
        [cookies deleteCookie:cookie];
    }

  ...
}

【讨论】:

    【解决方案2】:

    尝试在 fbDidLogout 块的末尾添加这些:

    mFacebook.accessToken = nil;
    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];
        }
    }
    

    【讨论】:

      【解决方案3】:

      只需将此行添加到 fbDidLogout 方法

      [mFacebook invalidateSession];
      

      这肯定会让你从 Facebook 注销。

      【讨论】:

        【解决方案4】:

        试试这个代码:

        - (void) fbDidLogout {
            // Remove saved authorization information if it exists
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            if ([defaults objectForKey:@"FBAccessTokenKey"]) {
                [defaults removeObjectForKey:@"FBAccessTokenKey"];
                [defaults removeObjectForKey:@"FBExpirationDateKey"];
                [defaults synchronize];
            }
        }
        

        不要忘记在您的 AppDelegate 中为 facebook.h 创建一个实例。

        【讨论】:

        • 抱歉,您提到的代码与我在问题中编写的代码相同..
        • 您的会话没有失效。这就是问题所在。您是否在 ViewController 中添加了 FBSessionDelegate?
        • 实际上,当我第一次安装应用程序时,我调用了以下代码 [mFacebook authorize:mArrayFBPermissions];此代码首先显示 safari 中的登录页面,然后显示权限页面。但是如果登录后注销,那么它只会在 safari 中打开权限页面。
        • 哦...那么我认为您的 safari 会为 facebook 存储会话。如果你在没有 safari Auth 的情况下尝试它,那么你可能会成功。
        【解决方案5】:

        尝试从 Facebook 应用程序中注销。它可能只是从 Facebook 应用程序中获取令牌。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-15
          相关资源
          最近更新 更多