在 Swift 的 FBSDK 中切换 FB 用户的问题

Posted

技术标签:

【中文标题】在 Swift 的 FBSDK 中切换 FB 用户的问题【英文标题】:issue switching FB users in FBSDK in Swift 【发布时间】:2017-10-08 18:45:57 【问题描述】:

我有一个应用程序,它在应用程序内使用 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 登录到“应用名称”。您要继续吗?”我没有看到让我输入电子邮件和密码的字段。有什么我可能会遗漏的想法吗?

【问题讨论】:

【参考方案1】:

我遇到了类似的问题。原因在这里解释:How to completely Logout of Facebook SDK Auth in ios App

我可以通过设置登录行为来解决这个问题,即

LoginManager.setLoginBehavior('web');

在开始登录之前。

【讨论】:

新语法是fbLoginManager.loginBehavior = .web @StephanePaquet 解决了这个问题,通过提示他们每次登录尝试为 FB 用户/通行证空白...为什么很难让它填充字段并让用户在需要时进行编辑.我不喜欢任何一个选项。 我刚刚测试了 Dribble,他们的 Facebook 登录完全被破坏了。测试了 Pinterest,它与 OP 有相同的问题。如果我必须在 3 个问题之间进行选择,请选择 OP 发布并在 pintrest 中看到的初始问题。 重新发送 Facebook sdk 仅支持通过浏览器。我认为在 Iphone 设置中清除 Safari 历史记录是唯一的方法。【参考方案2】:

我在 Safari 缓存 Facebook 登录凭据时遇到了这个问题。转到设置...Safari ...清除历史记录和数据。解决了。

【讨论】:

有效,但不能推广,因为用户永远不会这样做。 是的。作为开发人员,这对我来说是一个测试问题,而不是最终用户的生产问题。【参考方案3】:

可以通过设置不同的LoginBehavior来处理

让 loginManager = LoginManager()

loginManager.loginBehavior = .web

.native

:可以使用原生 Facebook 应用登录。

.浏览器

:尝试通过 Safari.app 或SFSafariViewController(如果可用)登录。

.systemAccount

:尝试通过当前通过设备设置登录的 Facebook 帐户登录。

.web

:尝试通过模式WebView 弹出登录。

【讨论】:

以上是关于在 Swift 的 FBSDK 中切换 FB 用户的问题的主要内容,如果未能解决你的问题,请参考以下文章

无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌

使用 FBSDK for iOS 登录冻结

如何在 iPhone 的 Swift iOS 中使用 FBSDK 获取用户电子邮件地址?

Swift FBSDK 问题 - 某些用户的 Facebook ID 为零

FBSDK 检查用户是不是已经授权应用程序 Swift

如何检查用户是不是使用 FB SDK 4.0 for Android 登录?