Как загрузить ссылку на профиль в базу данных Firebase - PullRequest
0 голосов
/ 07 января 2020

Когда мой " ProfileImageuUrl " обнаруживается в базе данных firebase, ссылка на изображение профиля отсутствует, что вызывает пропуск зажигания в моем профиле пользователя, изображение не будет отображаться, поскольку в firebase нет ссылки база данных, как мне реструктурировать мой код к этой проблеме

if let AuthData = AuthDataResult {
                print(AuthData.user.email)
                let dict : Dictionary < String, Any> = [
                    "uid": AuthData.user.uid,
                    "email": AuthData.user.email,
                    "ProfileImageUrl": "",
                    ]
             if let profileImge = self.selectedImage, let imageData = profileImge.jpegData(compressionQuality: 0.1) {
             let StorageRef = Storage.storage()
                    .reference(forURL: "gs://tunnel-vision-458d6.appspot.com/")
                let storageProfileRef = StorageRef.child("profileImage").child(AuthData.user.uid)

                let metadata = StorageMetadata()
                metadata.contentType = "profileImage.jpg"
                storageProfileRef.putData(imageData, metadata: metadata) { (storageMetadata, error) in
                    if error != nil {
                    return
                }

                    storageProfileRef.downloadURL { (url, error) in
                        if let metaImageUrl = url?.absoluteString {
                        print(metaImageUrl)
                    }


                        Database.database().reference().child("users").child(AuthData.user.uid).updateChildValues(dict, withCompletionBlock: {
                            (error,ref) in
                            if error == nil {
                                print("Done")

                            }

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Вы присваиваете пустую строку для ProfileImageUrl в dict:

let dict : Dictionary < String, Any> = [
    "uid": AuthData.user.uid,
    "email": AuthData.user.email,
    "ProfileImageUrl": "",
]

И впоследствии вы никогда не обновите ее. Диктовка написана именно так, как вы видите здесь. Присвойте ему желаемое значение, прежде чем писать.

1 голос
/ 07 января 2020

Вам необходимо

1- Сделать dict переменную

            var dict : Dictionary < String, Any> = [
                "uid": AuthData.user.uid,
                "email": AuthData.user.email 
                ]

2- Присвоить значение ProfileImageUrl и встроить обновление значений в обратный вызов storageProfileRef.downloadURL, где у вас есть URL для изображения

              storageProfileRef.downloadURL { (url, error) in
                    if let metaImageUrl = url?.absoluteString {
                    print(metaImageUrl)
                     dict["ProfileImageUrl"] = metaImageUrl
                    Database.database().reference().child("users").child(AuthData.user.uid).updateChildValues(dict, withCompletionBlock: {
                        (error,ref) in
                        if error == nil {
                            print("Done")

                        }
                    }
               }
          }
...