SNSアプリ(twitter,insta系)を作っています。
Authを使ったログイン機能・ RealtimeDatabaseを使った投稿機能・プロフィールの保存機能が実装されています。
ご覧の様に画像データ(投稿画像・アイコン画像)は圧縮、エンコードして文字列として保存していました。
しかし、RDBに画像の様な大容量のデータを保存するのはRDBの容量を圧迫するため、代わりにFirebaseStorageを使うと良いとのアドバイスをいただきました。
そこでまずプロフィールの名前はRDB、アイコン画像はStorageにアップロードするコードを書いてみました。
swift
1 //userdefaultとサーバに送る 2 @IBAction func changeProfile(_ sender: Any) { 3 4 5 6 //userdefaultに保存 7 8 //名前 9 let username = nameTextField.text 10 userDefault.set(username, forKey: "username") 11 12 //アイコン画像 13 var data: Data = Data() 14 if let image = iconImageView.image { 15 data = UIImageJPEGRepresentation(image, 0.1)! as Data 16 } 17 let encodedIcon = data.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters) as String 18 userDefault.set(encodedIcon, forKey: "usericon") 19 20 21 //サーバにアップロード 22 let uid = Auth.auth().currentUser?.uid 23 24 //名前はRDBに保存 25 let RDBref = Database.database().reference() 26 let prof: Dictionary = ["username": username] 27 RDBref.child("profs").child(uid!).setValue(prof) 28 29 //アイコンは(初期画像でなければ)Storageに保存 30 if iconImageView.image != UIImage(named: "user.png") { 31 let storageRef = Storage.storage().reference() 32 storageRef.child("usericons").child(uid!).putData(data, metadata: nil) 33 } 34 KRProgressHUD.showSuccess(withMessage: "変更しました") 35 36 }
RDBと同じ様にusericonsというchildを作り、その中にchild(uid)で保存しました。
アップロードはできたのですがStorageに保存したものをダウンロードする際の方法が公式ページを見たところどうやら三つあるらしく、現在どの方法を使えば良いのか悩んでおります。
ちなみにRDB・storageにアップロードしたプロフィール情報(名前とアイコン画像)はこの先タイムラインに投稿画像一枚と一緒にcollectionviewの一つのcellとして表示する予定です。
この様な実装を考えたとき、
① 皆様はどの様な方法で画像をダウンロードしていますでしょうか?
② また、アップロードの仕方(RDBとStorageの構造化の仕方)などがこうする方が良い。私はこうしている。などありましたらそちらの方も一言教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/29 04:52
2018/03/29 05:23
2018/03/29 08:32