我正在获取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

我能让它工作几天,现在它不再工作了,我已经一行一行地检查过了,我真的不明白为什么它不工作了。

最佳答案

我用了这个代码:

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)
                            }
                        }

                    }
                })
            }

        }
    }
}

从这篇文章开始工作

关于swift - 将Facebook个人资料图片用作个人资料图片Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43739176/

10-09 09:14