Swift, Firebase: нет данных в базе данных в реальном времени после создания пользователя - PullRequest
0 голосов
/ 09 ноября 2018

Использование Xcode 10.1, Swift 4.2 и Firebase ##

Я не могу видеть данные в своей базе данных в реальном времени после загрузки данных в базу данных со следующим кодом:

static func createUser(username: String, email: String, password: String, imageData: Data, onSuccess: @escaping () -> Void, onError: @escaping (_ error: String?) -> Void) {

    Auth.auth().createUser(withEmail: email, password: password) { (data, error) in
        if let err = error {
            onError(err.localizedDescription)
            return
        }
        // User erfolgreich erstellt
        guard let uid = data?.user.uid else { return }
        self.uploadUserData(uid: uid, username: username, email: email, imageData: imageData, onSuccess: onSuccess)
    }
}

static func uploadUserData(uid: String, username: String, email: String, imageData: Data, onSuccess: @escaping () -> Void) {


    let storageRef = Storage.storage().reference().child("profile_image").child(uid)

    storageRef.putData(imageData, metadata: nil) { (metadata, error) in
        if error != nil {
            return
        }
    }

    storageRef.downloadURL(completion:  { (url, error) in
        if  error != nil {
            print(error!.localizedDescription)
            return
        }

        let profilImageURL = url?.absoluteString


        let ref = Database.database().reference().child("users").child(uid)
        ref.setValue(["username" : username, "email" : email, "profileImageURL": profilImageURL ?? "Kein Bild vorhanden"])

    })
     onSuccess()
}

Настройки в firebase:

The settings in firebase

Должен работать правильно. Я уже посмотрел документацию по пожарной базе и не нашел больше информации.

1 Ответ

0 голосов
/ 09 ноября 2018

Загружается ли изображение в облачное хранилище?Если это так, но URL для загрузки не записывается в базу данных, я думаю, это потому, что данные не загружаются до того, как вы сгенерируете URL для загрузки.Поскольку функция загрузки является асинхронной, функцию downloadURL следует вызывать из замыкания.

static func uploadUserData(uid: String, username: String, email: String, imageData: Data, onSuccess: @escaping () -> Void) {

    let storageRef = Storage.storage().reference().child("profile_image").child(uid)

    storageRef.putData(imageData, metadata: nil) { (metadata, error) in
        if error != nil {
            return
        }
        storageRef.downloadURL(completion:  { (url, error) in
        if  error != nil {
            print(error!.localizedDescription)
            return
        }
     onSuccess()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...