Kir*_*odi 24 facebook ios swift
朋友我想在我的应用程序中集成Facebook,以便我下载新的Facebook SDK v.4.1.0,对于Facebook登录按钮使用FBSDKLoginButtonSwift中的以下代码类.
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
}
}
Run Code Online (Sandbox Code Playgroud)
如上面的代码,显示"使用Facebook登录"按钮.

成功登录后,显示注销按钮.当我点击注销按钮然后调用它的委托 - 委托类FBSDKLoginButtonDelegate
委派注销方法:
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
println("User Logged Out")
FBSDKAccessToken.setCurrentAccessToken(nil)
FBSDKProfile.setCurrentProfile(nil)
let manager = FBSDKLoginManager()
manager.logOut()
}
Run Code Online (Sandbox Code Playgroud)
在委托中我清楚令牌,也称为类内注销功能FBSDKLoginManager.但每次都获得用户的授权屏幕.没有登录屏幕,以便其他用户无法登录Facebook.每次我必须清除浏览器历史记录.
没有明确的浏览器历史记录,没有显示登录页面,以便其他用户无法登录.
问题:Facebook BUG
注销后每次显示屏幕:

LC *_*C 웃 35
我也被困在同一个地方.然而冲浪我得出结论.
首先让我们了解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)")
})
Run Code Online (Sandbox Code Playgroud)
但是为了完全从应用程序注销以便提示用户重新输入凭据,请参阅以下内容:
您必须从Facebook应用程序注销,然后只有您真正注销,然后只有应用程序再次要求凭据.这是因为您没有在手机上的任何地方登录.所以,SSO规则不适用于此处.如果你只是从你的应用程序(而不是fb)注销,你将会因为在你的情况下从safari登录而被记录.原因是,你会收到同样的消息,表明你已经被授权使用这个应用程序.
尝试在模拟器上进行测试,当您第一次插入凭据时,Safari会打开,您输入的凭据将保存在safari中.因此,下次当您注销并登录应用程序时,它不会要求凭据.因为safari提供了它(如果您在那里输入了凭证,则为facebook应用程序)
现在你打开safari并打开facebook.你看到facebook已经打开,并自动从Safari中获取信息,或者如果你安装了facebook应用程序,那么从那里开始.因此,从safari注销并重新打开您的应用程序并从应用程序注销.然后您的应用程序将再次询问凭据.
小智 7
这个答案帮助我确定了根本原因问题.2个键是SSO和Safari.Facebook很难记录Facebook登录过程.我不得不关闭SSO.这是在您的应用程序注册的Facebook开发者网站上的"设置"下.但更重要的是我必须改变FBLoginManager的行为才能使用UIWebView而不是Safari.我使用以下代码片段完成了此操作:
FBSDKLoginManager *loginMgr = [[FBSDKLoginManager alloc] init];
loginMgr.loginBehavior = FBSDKLoginBehaviorWeb;
Run Code Online (Sandbox Code Playgroud)
如果您使用默认行为,它将通过Facebook应用程序或浏览器Safari管理注销,而不是直接从应用程序管理.FBSDKLoginBehaviorWeb是在弹出窗口中使用iOS UIWebView.这非常有效,每次注销后都需要凭据.
| 归档时间: |
|
| 查看次数: |
11903 次 |
| 最近记录: |