在您浏览图片Swift时使用Facebook个人资料图片

时间:2017-05-02 13:29:38

标签: swift firebase firebase-realtime-database firebase-authentication firebase-storage

我正在获取Facebook的个人资料图片并将其显示为我的应用中的个人资料图片。这是代码。

if let user = FIRAuth.auth()?.currentUser{
    let photoUrl = user.photoURL
    let name = user.displayName

    self.FacebookUser.text = name

    let storage = FIRStorage.storage()

    //refer your particular storage service
    let storageRef = storage.reference(forURL: "gs://gsignme-14416.appspot.com")
    let profilePicRef = storageRef.child(user.uid+"/profile_pic.jpg")

    profilePicRef.data(withMaxSize: 1 * 1024 * 1024, completion: { (data, error) -> Void in
        if (error == nil){

            self.FacebookPic.image = UIImage(data: data!)

        }else{

            print("Error downloading image:" )


        }
    })

        if(self.FacebookPic.image == nil)
    {
        var profilePic = FBSDKGraphRequest(graphPath: "me/picture", parameters: ["height": 300, "width": 300, "redirect": false], httpMethod: "GET")
        profilePic?.start(completionHandler: {(_ connection, result, error) -> Void in
            // Handle the result


            if error == nil {
                if let dictionary = result as? [String: Any],
                    let data = dictionary["data"] as? [String:Any],
                    let urlPic = data["url"] as? String{

                    if let imageData = NSData(contentsOf: NSURL(string: urlPic)!as URL){

                        let uploadTask = profilePicRef.put(imageData as Data, metadata: nil) {
                            metadata, error in

                            if (error == nil)
                            {
                                let downloadurl = metadata!.downloadURL
                            }
                            else
                            {
                                print("Error in downloading image")
                            }
                        }

                        self.FacebookPic.image = UIImage(data: imageData as Data)
                    }}}})}
}else{
}

//The END of the Facebook user and picture code

我能够让它工作几天,现在它不再起作用了,我已经逐行完成了它,老实说我无法弄清楚它为什么不起作用。

2 个答案:

答案 0 :(得分:1)

我使用了这段代码:

func pictureFromFirebase(loginMethod: Int)
{
    if loginMethod == 0 //FB
    {
        var profilePic = FBSDKGraphRequest(graphPath: "me/picture", parameters: ["height":300, "width":300, "redirect":false], httpMethod: "GET")
        let profilePicRef = storageRef.child((user?.uid)!+"/profile_pic.jpg")
        profilePicRef.data(withMaxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                // Uh-oh, an error occurred!
                // but we don't need to do anything yet.  Try to download the profile pic
            }
            if (data != nil)
            {
                print("no need to download image from facebook")
                self.profileImage.image = UIImage (data: data!)
            }
            else
            {
                // THIS IS THE BLOCK THAT HAS BEEN MOVED
                // WHICH WILL NOW BE EXECUTED IN TWO CONDITIONS - 
                // 1. AN ERROR IN THE DOWNLOAD
                // 2. NO PROFILE PIC AVAILABLE
                print("downloading image from facebook")
                profilePic?.start(completionHandler: {(_ connection, _ result, _ error) -> Void in
                    if (error == nil)
                    {
                        if let dictionary = result as? [String:Any], let data = dictionary["data"] as? [String:Any],
                            let urlPic = data["url"] as? String {
                            if let imageData = NSData(contentsOf: NSURL(string: urlPic)! as URL)
                            {
                                let uploadTask = profilePicRef.put(imageData as Data, metadata: nil){
                                    metadata, error in
                                    if (error == nil)
                                    {
                                        let downloadUrl = metadata!.downloadURL
                                    }
                                    else
                                    {
                                        print("error in downloading image")
                                    }
                                }
                                self.profileImage.image = UIImage(data: imageData as Data)
                            }
                        }

                    }
                })
            }

        }
    }
}

来自这篇文章Second If statement gets called before first statement finished in one function并且有效

答案 1 :(得分:0)

您只需获取 facebook 个人资料照片。使用此网址并将网址放在 UIImageview

let profilepicURl = "https://graph.facebook.com/\(user_id_fb)/picture?type=large" //user_id_fb like 1251246454544 your facebook ID