我有一个应用程序,它使用应用程序内部的FB登录来收集用户FB ID,我用它来创建FB页面的链接,如下所示:
@IBAction func saveFacebookDidTap(_ sender: Any) {
if sharingFacebook == false {
if FBSDKAccessToken.current() == nil {
print("no token")
}
login.logIn(withReadPermissions: ["public_profile"], handler: { (result, error) -> Void in
if error == nil && !(result?.isCancelled)! {
let fbloginresult : FBSDKLoginManagerLoginResult = result!
if fbloginresult.grantedPermissions.contains("public_profile") {
print("success")
let parameters = ["fields" : "id"]
if FBSDKAccessToken.current() != nil {
self.facebookButton.setTitle("Remove Facebook from your Profile", for: [])
self.sharingFacebook = true
FBSDKGraphRequest(graphPath: "me", parameters: parameters).start { (connection, result, error) -> Void in
if error != nil {
return
}
let data:[String:AnyObject] = result as! [String : AnyObject]
if let id = data["id"] as? NSString{
//do stuf with the id
我还允许用户删除此FB链接,如下所示:
else {
self.sharingFacebook = false
self.facebookButton.setTitle("Add Facebook to your Profile", for: [])
FBSDKLoginManager().logOut()
}
我遇到了FB登录页面的问题。当用户点击添加他们的FB时,我看到一个页面上写着“您以前使用Facebook登录到”应用名称“。您要继续吗?”我没有看到允许我输入电子邮件和密码的字段。我有什么想法可以丢失吗?
答案 0 :(得分:3)
我遇到了类似的问题。这里解释了原因:How to completely Logout of Facebook SDK Auth in iOS App
我能够通过设置登录行为来解决这个问题,即
LoginManager.setLoginBehavior('web');
在开始登录之前。
答案 1 :(得分:1)
让loginManager = LoginManager()
loginManager.loginBehavior = .web
:可能会使用通过本地Facebook应用程序登录。
:尝试通过Safari.app或SFSafariViewController
(如果有)登录。
:尝试通过当前通过设备设置登录的Facebook帐户登录。
:尝试通过模式WebView
弹出窗口登录。
答案 2 :(得分:0)
当Safari缓存Facebook登录凭据时,我遇到了这个问题。去设置... Safari ...清除历史和数据。解决了它。
答案 3 :(得分:0)
与chez的答案类似,但这种方法可以平衡您想要的(切换FB帐户),同时不会给99%不想改变帐户的人增加额外的麻烦重新登录。
let loginManager = LoginManager()
if self.setUserCanceledFBRequest!{
loginManager.loginBehavior = .web
}
我默认并在成功登录后将setUserCanceledFBRequest
设置为false,如果用户在FB授权屏幕上点击取消,则设置为true
我不想将.web设置为登录行为的原因是它给大多数用户实际上不想更改Facebook帐户带来额外负担,因为它使得每个人都必须在登录时输入完整的FB凭据没有自动填充字段。如果用户真的想要更改帐户,我只需要在取消他们极有可能尝试的签名后再次尝试。然后使用.web方法清空FB登录字段。
虽然这种方法并不完全理想,但我认为它可以很好地平衡两种用例。