首页 > 解决方案 > iOS Facebook 登录在升级到 5 后无法正常工作

问题描述

我将我的 facebook SDK 更新到最新版本 (5),并带有以下 pod

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'

这是我更新的 facebook 登录功能

    let loginManager = LoginManager()
    loginManager.loginBehavior = .browser  //.native is not supported in new version

    loginManager.logIn(permissions: ["publicProfile", "userFriends", "email"], from: self) { (login, error) in
        if let e = error {
            self.showAlertForError(title: "", msg: e.localizedDescription)
            return
        }

        if let l = login {
            if l.declinedPermissions.contains("user_friends") || l.declinedPermissions.contains("email") {
                SVProgressHUD.dismiss()
                self.showAlertForError(title: "facebook_permission_required_text".localized(), msg: "facebook_permission_allow_text".localized())
                return
            }

            GraphRequest(graphPath: "/me", parameters: ["fields" : "id, email, first_name, last_name"])
                .start(completionHandler:  { (connection, result, error) in
                    guard let result = result as? NSDictionary,
                        let email = result["email"] as? String,
                        let first_name = result["first_name"] as? String,
                        let last_name = result["last_name"] as? String,
                        let user_id_fb = result["id"]  as? String else {
                            SVProgressHUD.dismiss()

                    }
                })

        }
    }

尝试登录时出现此错误。

登录错误

标签: iosswiftfacebookfacebook-graph-apifacebook-login

解决方案


您仍然可以像使用现有的一样发送请求iOS SDK

当前的请求方法对Graph API请求使用 a custom type-safe API。这使您可以graph API更准确地推断请求的类型,并提供clean API使用此数据的方法。

let connection = GraphRequestConnection()

    @IBAction private func loginWithReadPermissions() {
        let loginManager = LoginManager()
        loginManager.logIn(
            permissions: [.publicProfile, .userFriends, .email],
            viewController: self
        ) { result in
            self.loginManagerDidComplete(result)
        }
    }

   func loginManagerDidComplete(_ result: LoginResult) {
        switch result {
        case .cancelled:
            self.showAlertForError(
                title: "Login Cancelled",
                message: "User cancelled login."
            )

        case .failed(let error):
            self.showAlertForError(
                title: "Login Fail",
                message: "Login failed with error \(error)"
            )

        case .success(let grantedPermissions, _, _):
            self.showAlertForError(
                title: "Login Success",
                message: "Login succeeded with granted permissions: \(grantedPermissions)"
            )
 connection.add(GraphRequest(graphPath: "/me", parameters: ["fields" : "id, email, first_name, last_name"])) { httpResponse, result, error   in
    if error != nil {
        NSLog(error.debugDescription)
        return
    }
       guard let result = result as? NSDictionary,
           let email = result["email"] as? String,
           let first_name = result["first_name"] as? String,
           let last_name = result["last_name"] as? String,
           let user_id_fb = result["id"]  as? String else {
               SVProgressHUD.dismiss()

            }
          }
    connection.start()
        }
    }

推荐阅读