繁体   English   中英

Facebook Logout无法在ios中使用新的SDK V.4.1.0?

[英]Facebook Logout is not working in new SDK V.4.1.0 in ios?

朋友我想在我的App中集成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登录”按钮。

在此输入图像描述

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

委派注销方法:

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

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

    let manager = FBSDKLoginManager()
    manager.logOut()

}

在委托中我很清楚令牌,也称为FBSDKLoginManager类中的logout函数。 但每次都获得用户的授权屏幕。 没有登录屏幕,以便其他用户无法登录Facebook。 每次我必须清除浏览器历史记录。

没有明确的浏览器历史记录,没有显示登录页面,以便其他用户无法登录。

问题: Facebook BUG

注销后每次显示屏幕:

在此输入图像描述

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

首先让我们了解SingleSignOn的含义:

单点登录(SSO)是多个相关但独立的软件系统的访问控制的属性。 使用此属性,用户登录一次并获得对所有系统的访问权限,而不会被提示再次登录每个系统。

我认为有一点。为什么我们没有被要求再登录虽然我们已经退出了? 因为在模拟器上,凭证已保存在safari上(首次使用facebook登录时,您的应用程序会打开safari或facebook app,如果已安装)。

允许您查看“您已经授权...”消息的信息在于Facebook。要从您的应用撤消权限,您需要触摸图谱API。 FB文档,位于https://developers.facebook.com/docs/reference/api/user/的“删除”部分

撤消登录

您还可以通过调用此Graph API端点让人们完全取消授权应用或撤消登录:DELETE / {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注销并重新打开您的应用程序并从应用程序注销。然后您的应用程序将再次询问凭据。

这个答案帮助我确定了根本原因问题。 2个键是SSO和Safari。 Facebook很难记录Facebook登录过程。 我不得不关闭SSO。 这是在您的应用程序注册的Facebook开发者网站上的“设置”下。 但更重要的是我必须改变FBLoginManager的行为才能使用UIWebView而不是Safari。 我使用以下代码片段完成了此操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM