【问题标题】:Facebook Logout is not working in new SDK V.4.1.0 in ios?Facebook Logout 在 ios 的新 SDK V.4.1.0 中不起作用?
【发布时间】:2015-07-17 12:38:39
【问题描述】:

朋友们,我想将 Facebook 集成到我的应用程序中,以便我下载新的 Facebook SDK v.4.1.0,对于 Facebook 登录按钮,请使用 FBSDKLoginButton 的类,如下面的 Swift 代码。

if (FBSDKAccessToken.currentAccessToken() != nil)
{
    // User is already logged in, do work such as go to next view controller.

    // Or Show Logout Button
    let loginView : FBSDKLoginButton = FBSDKLoginButton()
    self.view.addSubview(loginView)
    loginView.center = self.view.center
    loginView.readPermissions = ["public_profile", "email", "user_friends"]
    loginView.delegate = self
    self.returnUserData()
}
else
{
    let loginView : FBSDKLoginButton = FBSDKLoginButton()
    self.loginButtonDidLogOut(loginView)
    self.view.addSubview(loginView)
    loginView.center = self.view.center
    loginView.readPermissions = ["public_profile", "email", "user_friends"]
    loginView.delegate = self
 }
}

与上面的代码一样,显示“使用 Facebook 登录”按钮。

成功登录后显示注销按钮。当我点击注销按钮时,它的委托被调用 - 委托类FBSDKLoginButtonDelegate

注销的委托方法:

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
    println("User Logged Out")

    FBSDKAccessToken.setCurrentAccessToken(nil)
    FBSDKProfile.setCurrentProfile(nil)

    let manager = FBSDKLoginManager()
    manager.logOut()

}

在委托中,我是明确的令牌,也称为FBSDKLoginManager 类中的注销功能。但每次都得到用户的授权屏幕。 没有登录屏幕,因此其他用户无法使用 facebook 登录。每次我必须清除浏览器历史记录。

没有清除浏览器历史,没有显示登录页面,导致其他用户无法登录。

问题:Facebook BUG

每次登出后显示画面:

【问题讨论】:

  • 我也面临着同样的问题....还要得到年龄范围?
  • 我错过了您希望其他用户能够登录的部分(您可能需要强调这一点)。这与 4.1 无关,至少在 3.x 中如此。还应该从 Facebook 应用程序(应用程序本身,而不是您的应用程序)注销。检查here
  • @rokjarc 是的,这是真的..但是如果我们希望用户使用新凭据强制登录怎么办

标签: ios facebook swift


【解决方案1】:

我也被困在同一个地方。然而冲浪我得出以下结论。

首先让我们知道SingleSignOn的含义:

单点登录 (SSO) 是多个相关但独立的软件系统的访问控制属性。使用此属性,用户只需登录一次即可访问所有系统,而无需在每个系统上再次提示登录。

我认为有一点。为什么,虽然我们已经注销,但我们没有被要求再次登录?这是因为在模拟器上,凭据已保存在 safari 上(第一次使用 facebook 登录时,您的应用会打开 safari 或 facebook 应用(如果已安装)。

让您看到“您已经授权...”消息的信息由 Facebook 提供。要从您的应用撤消权限,您需要触摸 Graph API。 FB 文档,在https://developers.facebook.com/docs/reference/api/user/的“删除”部分中

撤销登录

您还可以通过调用此 Graph API 端点来让人们完全取消对应用的授权或撤销登录: 删除 /{user-id}/permissions

例如在 swift 中:

 let deletepermission = FBSDKGraphRequest(graphPath: "me/permissions/", parameters: nil, HTTPMethod: "DELETE")
        deletepermission.startWithCompletionHandler({(connection,result,error)-> Void in            
            println("the delete permission is \(result)")

        })

但为了完全退出应用程序以便提示用户重新输入凭据,请参见下文:

您必须从 facebook 应用程序中注销,然后只有您真正注销,然后只有该应用程序再次要求提供凭据。这是因为您没有在手机上的任何地方登录。因此,SSO 规则不适用于此处。如果您仅从您的应用程序(不是 fb 应用程序)注销,您将因为您的情况下从 safari 登录而被登录。这就是为什么,您将收到相同的消息,表明您已获得此应用程序的授权。

尝试在模拟器上进行测试,当您第一次插入凭据时,safari 会打开,您输入的凭据会保存在 safari 中。因此,下次您注销并登录应用程序时,它不会要求提供凭据。因为 safari 提供了它(如果您在此处输入了凭据,则为 facebook 应用程序)

现在您打开 safari 并打开 facebook。您会看到 facebook 已经打开,并且它会自动从 safari 获取信息,或者如果您从那里安装了 facebook 应用程序。所以从 safari 中注销并重新打开您的应用程序并从应用程序中注销。然后您的应用程序将再次询问凭据。

【讨论】:

  • 和你之前问的一样。例如 self.fbLoginView.readPermissions = ["public_profile", "email", "user_friends","user_likes"]
  • 出现错误:未知路径组件:/108411252823523
  • 现在我找到了您问题的答案..查看更新的答案
  • 是的,+1票但不要求再次登录,必须清除Safari浏览器的数据。
  • 那么,是否不可能注销用户然后要求重新输入 facebook 凭据?如果我想用不同的用户登录怎么办?我必须退出 saffari,然后打开我自己的应用程序?
【解决方案2】:

这个答案帮助我确定了根本原因问题。两个键是 SSO 和 Safari。 Facebook 对 Facebook 登录过程的记录很差。我不得不关闭 SSO。这是在 Facebook 开发者网站上,您的应用已在其中注册,位于“设置”下。但更重要的是我不得不改变 FBLoginManager 的行为来使用 UIWebView 而不是 Safari。我用以下 sn-p 做到了这一点:

FBSDKLoginManager *loginMgr = [[FBSDKLoginManager alloc] init];
loginMgr.loginBehavior = FBSDKLoginBehaviorWeb;

如果您使用默认行为,它将通过 Facebook 应用程序或浏览器 Safari 管理注销,而不是直接从应用程序管理。 FBSDKLoginBehaviorWeb 是在弹出窗口中使用 iOS UIWebView。这非常有效,每次注销后都需要凭据。

【讨论】:

  • 我一直在走这条路,最终我提出了使用 FBSDKLoginBehaviorWeb 的建议,但它有一个问题。有关详细信息,请参阅 SO 48755910。基本上,FB Policy 现在禁止在 iOS 中使用 FBSDKLoginBehaviorWeb,除非您的 App 是 Kiosk App。我仍在寻找一种合法且易于解决的方法,以解决如何在 iOS 应用上注销一个 FB 用户和另一个登录。
  • 这方面有什么更新吗?有没有一种真正的方法可以在应用程序上从 SFSafari 注销 facebook 用户?
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2023-03-29
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多