首页 > 解决方案 > 在 swift4 中的 facebook 集成中获取用户详细信息

问题描述

我正在尝试在集成 FBSDK 后获取用户详细信息。但不幸的是,我收到了一个错误,例如“使用未解析的标识符 'FacebookCore'”。如果有人帮助我,那就太好了。谢谢!

//Imported SDK
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit




 func fetchUserProfile()
    {

        let AccessToken = FBSDKAccessToken.current()
        let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id, email, name, picture.width(480).height(480)"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: FacebookCore.GraphAPIVersion.defaultVersion))

        request.start({ (response, requestResult) in
        switch requestResult{
        case .success(let response):
        print(response.dictionaryValue)
        case .failed(let error):
        print(error.localizedDescription)
        }
        })
    }

标签: iosswiftfacebook-graph-api

解决方案


您可以通过这种方式获取数据。但是您需要使用 pod 或手动安装新的最新库

import FBSDKLoginKit
func signInWithFB(_ forVC:UIViewController , sucess:@escaping (_ data:NSMutableDictionary) -> (Void) , falure:@escaping (_ error:NSError? , _ cancle:Bool?) -> (Void))
    {
        let obj_facebook = FBSDKLoginManager()
        obj_facebook.loginBehavior = .native
        obj_facebook.logOut()
//        "user_birthday","user_gender"
        obj_facebook.logIn(withReadPermissions: ["public_profile","email"], from: forVC) { (result:FBSDKLoginManagerLoginResult?, error:Error?) -> Void in
            if ((error) != nil)
            {
                falure(error as NSError?, false)
            }
            else if ((result?.isCancelled) == true)
            {
                falure(nil, true)
            }
            else
            {
                let dicLoginData = NSMutableDictionary()
//                name,email,first_name,last_name,birthday
                let request = FBSDKGraphRequest(graphPath: "/me?fields=name,email,first_name,last_name", parameters: nil)
                let _ =
                request?.start(completionHandler: { (Connection:FBSDKGraphRequestConnection?, result:Any!, error:Error?) -> Void in

                    if error == nil
                    {
                        guard let results = result as? [String: Any] else {
                            falure(nil, false)
                            return
                        }
                        sucess(result)
                    }
                    else
                    {
                        falure(error as NSError?, false)
                    }

                })

            }
        }
    }

推荐阅读