2017-11-07 1 views
2

私は、ユーザーがfirebaseサービス(firebase storage)を使って自分のプロフィール画像を更新できるアプリを構築しています。firebase storageの変更を監視し、リアルタイムでviewcontrollerを更新するにはどうすればいいですか?

私のアプリのユーザーには複数の友達がいて、彼の友人の写真がビューコントローラーに表示されます。

私が達成したいのは、ユーザーが彼のプロフィール画像を更新するときに、(他のデバイスを使用して接続された)友人がすべて自分の画像をリアルタイムで変更することです。

私は最も簡単な解決策は、ストレージの変更を監視することだと思います。ここで

は、私は、ユーザーの画像

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ストレージにchangementを鑑賞する方法についてのアイデアを持っているんです。

は、私は単に私の知る限りではFirebaseは、ストレージモジュールで「変化を見て」サポートしていません

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

答えて

2

を用いて画像を取得します。これを回避する最善の方法は、Realtimeデータベース内のプロファイルイメージにURLを保存し、そこで変更をリッスンし、それに応じてイメージをダウンロードすることです。画像ごとにランダムに生成された文字列を使用することで、それらが一意であることを保証することができます。ような何か -

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

良いアイデアクリス -

_ = 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]) } } 

は次に変更を監視します –

関連する問題