从FBSDKGraphRequest到Storyboard

时间:2017-12-04 19:02:49

标签: ios swift facebook-graph-api

我是编码的初学者,但我有一个很大的问题:)

我不知道如何在主要故事板表格FBSDKGraphRequest上显示信息。

接下来我应该做些什么来获得故事板?我希望有人可以帮助我:)。

使用Swift 3,Xcode 8

Facebook登录正常,代码为:

    func getFBUserData(){
    if((FBSDKAccessToken.current()) != nil){
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in
            if (error == nil){
                self.dict = result as? [String : AnyObject]
                print(result!)
                print(self.dict)
            }
        })
    }

2 个答案:

答案 0 :(得分:1)

我认为这有四个步骤 - 如果你已经了解其中一些,我向你道歉。

  1. 将UIImageView从界面构建器中的对象库拖到故事板中的视图。

  2. 将UIImageView作为IBOutlet连接到您的代码并命名。通过控制从新的UIImageView拖动到您的代码来执行此操作,然后在弹出窗口中指定一个插座并命名UIImageView。在我的情况下,我将其命名为“facebookPicture”

  3. 从FaceBook结果中获取图像的URL。以下示例代码逐步深入到结果字典中。有很多方法可以缩短它。

    @IBOutlet var facebookPicture: UIImageView!
    
    func getFBUserID(){
     if((FBSDKAccessToken.current()) != nil) {
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(
            completionHandler: {
                [weak self] (connection, result, error) -> Void in
                guard let strongSelf = self else { return }
                if let error = error {
                    print("Failed to download FB user with error:. \(error)")
                }
                if (error == nil) {
                    let resultDictSwift = result as! Dictionary<String, Any>
                    if let picture = resultDictSwift["picture"] as? Dictionary<String, Any> {
                        if let pictureData = picture["data"] as? Dictionary<String, Any> {
                            if let pictureURL = NSURL(string: (pictureData["url"] as? String)! ) {
                                strongSelf.downloadImage(url: pictureURL as URL)
                            }
                        }
                    }
                    print(result!)
                    let FBID = resultDictSwift["id"]
                    strongSelf.facebookID = FBID as! String?
                    print("User FB id: \(strongSelf.facebookID!)")
                }
            })
        }
    }
    
  4. 从URL位置下载图像。以下是异步执行并使用先前的堆栈溢出回答here下载完成后,它将下载的结果设置为UIImageView中的图像

    func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
    URLSession.shared.dataTask(with: url) { data, response, error in
        completion(data, response, error)
        }.resume()
    }
    
    func downloadImage(url: URL) {
        print("Download Started")
        getDataFromUrl(url: url) { data, response, error in
        guard let data = data, error == nil else { return }
        print(response?.suggestedFilename ?? url.lastPathComponent)
        print("Download Finished")
        DispatchQueue.main.async() {
            self.facebookPicture.image = UIImage(data: data)
        }
       }
     }
    
  5. 我希望这有帮助!

答案 1 :(得分:0)

在Swift 3中

@IBAction func btnFacebookTapped(_ sender: UIButton)
    {


        let loginManager = FBSDKLoginManager()
        loginManager.logIn(withReadPermissions: ["user_about_me", "email" , "user_birthday","user_hometown"], from: self) { (loginResult, error) in
            if error != nil
            {
                self.showalert(strMessage: (error?.localizedDescription)!)
            }
            else
            {

                if loginResult?.grantedPermissions == nil
                {
                    self.showalert(strMessage: "Login Permissions not granted")
                    return
                }

                if (loginResult?.grantedPermissions.contains("email"))!
                {

                        self.getFBUserData()


                }
            }
        }
    }
    func getFBUserData()
    {
        FBSDKGraphRequest.init(graphPath: "me?fields=id,name,email,first_name,last_name,cover,picture.type(large),gender,birthday,hometown", parameters: nil).start(completionHandler: { (connection , result , error ) in

            if(error == nil){



                DispatchQueue.main.async {
                    let dictionary = result as! NSDictionary

                    print(dictionary)
                    print("Name : \(dictionary.value(forKey: "name")!)")
                    print("FB ID : \(dictionary.value(forKey: "id")!)")
}

            }else{

                self.showalert(strMessage: "Somthig Went Wrong..!")
            }
        })

    }