ios - 如何实时观察 firebase 存储的变化并更新 viewcontroller?

标签 ios swift firebase firebase-storage

我正在构建一个应用程序,用户可以在其中使用 firebase 服务(firebase 存储)更新他的个人资料图片。

在我的应用程序中,用户可以有多个 friend ,他 friend 的照片显示在 View Controller 中。

我想要实现的是,当用户更新他的个人资料图片时,他的所有 friend (使用其他设备连接)都会实时更改他的图片。

对此,我认为最简单的解决方案是观察存储空间的变化。

这是我用来上传用户图片的代码

 let storage = FIRStorage.storage()
                    let storageref = storage.reference(forURL: "my firebase url")
                    let imageref = storageref.child("images")
                    let userid : String = (user.uid)
                    let spaceref = imageref.child("\(userid).jpg")

                    let imageConverter = ImageConverter()
                    var profilePicture : UIImage = imageConverter.cropToBounds(image: self.profilePicture.image!, width: 150 ,height: 150)
                    profilePicture = imageConverter.resizeImage(image: profilePicture, targetSize: CGSize(width: 140, height: 150))
                    let imageData = UIImagePNGRepresentation(profilePicture)
                    _ = spaceref.put(imageData!, metadata: nil){ metadata, error in
                        if (error != nil) {
                            loadingScreenViewController.view.removeFromSuperview()
                            self.alert(title: "Error", description: "please check your internet connection and try again")
                        }
                        else {
                            _ = metadata!.downloadURL
                        }

                    loadingScreenViewController.view.removeFromSuperview()

有没有人知道如何观察 Firebase 存储的变化。

我只是通过使用

来获取图像
let imageRef = storage.child("images/\(friendsManager.friends[indexPath.row].id).jpg")

最佳答案

据我所知,Firebase 不支持存储模块中的“监视更改”。解决此问题的最佳方法是将个人资料图像的 URL 存储在实时数据库中,然后监听那里的变化并相应地下载图像。为每张图片使用随机生成的字符串,以确保它们是独一无二的。像-

 _ = spaceref.put(imageData!, metadata: nil){ metadata, error in
      if (error != nil) {
             loadingScreenViewController.view.removeFromSuperview()
             self.alert(title: "Error", description: "please check your internet connection and try again")
      } else {
             if let downloadUrl = metadata.downloadURL() {
                 let db = Database.database().reference()
                 db.child("profiles").child("myuserid").setValue(["photoUrl" : downloadUrl])
             }
      }

然后观察变化-

profilesRef.observe(.childChanged, with: { (snapshot) -> Void in
  // Download the image from the stored url
})

关于ios - 如何实时观察 firebase 存储的变化并更新 viewcontroller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47154488/

相关文章:

ios - 如果在 textView swift 中添加一些文本后,点击空格两次不替换为句号

ios - 如何在更新版本时更改 iTunes Connect 中的 iOS 应用程序图标?

iphone - 调用函数的问题

ios - 在 SpriteKit 的不同屏幕上为节点大小定义变量的最佳方法

javascript - Firebase:使用 JavaScript SDK 加入 Firestore 文档结果

ios - Cocoa Touch UIWebView - 以编程方式与网页交互

swift - 用对象填充数组

ios - 如何将文件从目录复制到iphone文档目录

javascript - 如何为对象数组编写 firestore 查询过滤器?

Firebase功能如何搜索实时数据库