在Swift中用FBSDK切换FB用户

时间:2017-10-08 18:45:58

标签: swift facebook facebook-graph-api

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

4 个答案:

答案 0 :(得分:3)

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

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

LoginManager.setLoginBehavior('web');

在开始登录之前。

答案 1 :(得分:1)

您可以通过设置其他LoginBehavior来处理它

让loginManager = LoginManager()

loginManager.loginBehavior = .web

.native

:可能会使用通过本地Facebook应用程序登录。

。浏览器

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

.systemAccount

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

.web

:尝试通过模式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登录字段。

虽然这种方法并不完全理想,但我认为它可以很好地平衡两种用例。