robin hood
robin hood

Reputation: 35

Firebase Database user's profileImageUrl not updating

I want to update firestore databases property profileImageUrl with my uploaded pictures storage url ( storage code works fine, I can see the uploaded image with its own URL ) any ideas ?

if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
    myImage = image
    self.mainProfilePicImage.image = image
} // where I choose image

guard let imageData = self.mainProfilePicImage.image?.jpegData(compressionQuality: 0.4) else {
    return
} // compressing to jpeg

let userID = Auth.auth().currentUser!.uid
let storageRef = Storage.storage().reference(forURL: "gs://xxxxxxx.appspot.com/") // my firebase storage
let storageProfileRef = storageRef.child("profile").child(userID)

let metadata = StorageMetadata()
metadata.contentType = "image/jpeg"
storageProfileRef.putData(imageData,metadata: metadata) { (storageMetadata, error) in
    if error != nil {
    print("error")
    }
    storageProfileRef.downloadURL(completion: {(url,error) in
        if let metaImageUrl = url?.absoluteString { // downloading url from storage of picked image 
            print("meta image url: \(metaImageUrl)") // printing URL
            let db = Firestore.firestore()
            db.collection("users").document(userID).updateData([
                "profileImageUrl": metaImageUrl,
            ]) { err in
                if let err = err {
                    print("Error updating document: \(err)")
                } else {
                    print("Document successfully updated")
                }
            }
        }
    })
}

firestore configuration for better understanding

Upvotes: 1

Views: 28

Answers (1)

robin hood
robin hood

Reputation: 35

The main problem was in my db.collection("users").document(userID) line, I found out that "users" document had different id, so I updated with code below:

                db.collection("users")
                    .whereField("uid", isEqualTo: userID)
                    .getDocuments() { (querySnapshot, err) in
                        if let err = err {
                            print("Couldnt update : \(err)")
                        } else {
                            let document = querySnapshot!.documents.first
                            document!.reference.updateData([
                                "profileImageUrl": url?.absoluteString
                            ])
                        }
                    }

Upvotes: 1

Related Questions