【问题标题】:Facebook Graph API: Swift SDK not working: GraphRequestFacebook Graph API:Swift SDK 不工作:GraphRequest
【发布时间】:2019-09-14 09:27:30
【问题描述】:

我一直在尝试完全遵循 Facebook 的文档,但无法理解为什么我的代码不起作用,即使它与文档中的完全一样。我已经在我的应用上登录 Facebook,但我需要获取个人资料数据。

这是我的功能。

func fetchFacebookUser() {

        let connection = GraphRequestConnection()

        connection.add(GraphRequest(graphPath: "/me")) { httpResponse, result in
            switch result {
            case .success(let response):
                print("Graph Request Succeeded: \(response)")
            case .failed(let error):
                print("Graph Request Failed: \(error)")
            }
        }
        connection.start()

    }

您会注意到它与文档完全相同: https://developers.facebook.com/docs/swift/graph

但我什至无法构建项目,因为我在 Xcode 中收到此错误:

Contextual closure type '(GraphRequestConnection?, Any?, Error?) -> Void' expects 3 arguments, but 2 were used in closure body Insert ',<#arg#> '

它有“修复”按钮,但这只是破坏了整个事情,Xcode(红色警告)抱怨 switch 语句中不存在任何情况。

我到处搜索,我得到的最接近的解决方案是这个 SO 帖子:Facebook GraphRequest for Swift 5 and Facebook SDK 5

但这没有答案:(

我确定有人使用 Swift 调用了 Graph API?我在这里错过了什么?

【问题讨论】:

    标签: swift facebook-graph-api


    【解决方案1】:

    但是我实现了 facebook 登录我的应用程序,它工作正常。

    单击按钮时,我使用 LoginManager 调用了 facebook 登录。

    @IBAction func continueWithFacebook(_ sender: Any) {
        let fbLoginManager : LoginManager = LoginManager()
        fbLoginManager.logIn(permissions: ["email"], from: self) { (result, error) -> Void in
            if (error == nil){
                let fbloginresult : LoginManagerLoginResult = result!
                if (result?.isCancelled)!{
                    return
                }
                if(fbloginresult.grantedPermissions.contains("email")) {
                    self.getFBUserData()
                }
            }
        }
    }
    

    之后我使用 GraphAP 获取用户的数据

    func getFBUserData() {
        if((AccessToken.current) != nil){
            GraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in
                if (error == nil){
                    guard let userDict = result as? [String:Any] else {
                        return
                    }
                    if let picture = userDict["picture"] as? [String:Any] ,
                        let imgData = picture["data"] as? [String:Any] ,
                        let imgUrl = imgData["url"] as? String {
                        self.uURLString = imgUrl
                        /*let url = URL(string: imgUrl)*/
                        print(imgData)
                    }
                    if let n = userDict["name"] as? String {
                        self.name = n
                    }
                    if let e = userDict["email"] as? String {
                        self.email = e
                    }
                    self.socialLogIn()
                 }
            })
        }
    }
    

    在你的 pod 文件中添加 - 吊舱“FBSDKCoreKit”和 pod 'FBSDKLoginKit'

    尝试像这样使用你会得到你嘲笑的结果。 快乐编码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多