Hi Brian, i've ranned into a small problem, i was trying to get my code to upload post to firebase with speed like yours. But the metadata.downloadUrl method is deprecated. I was resulted into uploading post in equivalent to the method of signing users in just using a post reference. This makes the posting to database extremely slow, and i tried to change my code but now it doesn't post at all, any tips on how i could fix that. Here is my code
@objc func handleShare(){
guard let caption = textView.text, caption.characters.count > 0 else {return}
guard let image = selectedImage else {return}
self.navigationItem.rightBarButtonItem?.isEnabled = false
guard let uploadData = UIImageJPEGRepresentation(image, 0.5) else {return}
let filename = NSUUID().uuidString
let storageRef = Storage.storage().reference()
storageRef.child("posts").child(filename).putData(uploadData, metadata: nil) { (metadata, err) in
storageRef.downloadURL(completion: {(url, err) in
if let err = err{
print("Unable to retrieve URL due to error: \(err.localizedDescription)")
self.navigationItem.rightBarButtonItem?.isEnabled = true
return
}
guard let imageUrl = url?.absoluteString else {return}
self.saveToDatabaseWithImageUrl(imageUrl: imageUrl)
print("Successfully uploaded post to: ", imageUrl)
}
)}
}
fileprivate func saveToDatabaseWithImageUrl(imageUrl: String) {
guard let postImage = selectedImage else { return }
guard let caption = textView.text else { return }
guard let uid = Auth.auth().currentUser?.uid else { return }
let userPostRef = Database.database().reference().child("posts").child(uid)
let ref = userPostRef.childByAutoId()
let values = ["imageUrl": imageUrl, "caption": caption, "imageWidth": postImage.size.width, "imageHeight": postImage.size.height, "creationDate": Date().timeIntervalSince1970] as [String : Any]
ref.updateChildValues(values) { (err, ref) in
if let err = err {
self.navigationItem.rightBarButtonItem?.isEnabled = true
print("Failed to save post to DB", err)
return
}
print("Successfully saved post to DB")
self.dismiss(animated: true, completion: nil)
}
}