この度、初めてアプリをリリースさせて頂きました👏
そして、制作中に一番苦労したCloud Firestoreの部分について書き残しておこうと思います✨
苦労した点としては、
↑投稿されている画像に対してイイねをした場合、
写真のように、イイねした物の一覧を見る事ができるLike画面を作りました。
しかし、、、!
Aの人がイイねした物が、Bの人がイイねを押していなくてもBの人のLike画面にも表示されていました。
今回は、
Aの人がイイねした物がAの人にしか見えないように、
Bの人がイイねした物がBの人にしか見えないように する解決策を見つけたので
書いていきます ↓ ↓ ↓
##CloudFirestoreの構造
このようにLikeIdにUser の ID (user.uid)を配列(Array型)で入れたらうまくいきました😏
##コード1(イイねする投稿が表示されている画面)
func likeSwipe(){
let saveDocument = Firestore.firestore()
let user = Auth.auth().currentUser
let docId = UserDefaults.standard.object(forKey: "docId") as! String
let addDocument = saveDocument.collection("Posts")
let query = addDocument.document(docId)
query.updateData([
"LikeId" : FieldValue.arrayUnion([user!.uid])
])
↑これをイイねボタンを押した時の動作に加えてください。
これで、currentUserのUserIDがLikeIdに加えられます
##コード2(Like画面_イイねした投稿の一覧を見る事ができる画面)
func fetchData(completion: @escaping () -> Void){
let user = Auth.auth().currentUser
let saveDocument = Firestore.firestore()
let uploadDocument = saveDocument.collection("Posts")
let query = uploadDocument.whereField("LikeId", arrayContains: user!.uid)
query.getDocuments { (querySnapshot, error) in
↑これでquery(ユーザーが値をLikeIdに入れているかを検索)して
ユーザーがイイねしたもの(LikeIdに入れた物)のみが表示されるようになります
最後のコード以降は引っ張ってくるデーターを通常通りかけばオケです。
https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja
(↑最後のコード以降の参考になれば、、)
##おまけ(削除するときのコード)
Cellを消した時(投稿のイイねを外した時)
let docId = self.documentIds[indexPath.row]
let user = Auth.auth().currentUser
let saveDocument = Firestore.firestore()
let uploadDocument = saveDocument.collection("Posts")
uploadDocument.document(docId).updateData([
"LikeId": FieldValue.arrayRemove([user!.uid])
])
このように、ArrayをRemoveすることで自分のイイね一覧から消えても、
他の人のイイね一覧には残ったまんまです。
##以上
これで、Cloud Firestoreを使ったユーザー別のいいね一覧を作れると思います☺️
もし良ければ、ダウンロードしてみてください👏✨
https://apps.apple.com/jp/app/baggle/id1518188746