8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firestoreでユーザー別のいいね一覧を作る時

Last updated at Posted at 2020-07-09

この度、初めてアプリをリリースさせて頂きました👏
そして、制作中に一番苦労したCloud Firestoreの部分について書き残しておこうと思います✨

苦労した点としては、

スクリーンショット 2020-07-09 23.12.29.png

↑投稿されている画像に対してイイねをした場合、
写真のように、イイねした物の一覧を見る事ができるLike画面を作りました。

しかし、、、!

スクリーンショット 2020-07-09 23.13.07.png

Aの人がイイねした物が、Bの人がイイねを押していなくてもBの人のLike画面にも表示されていました。

今回は、
Aの人がイイねした物がAの人にしか見えないように、
Bの人がイイねした物がBの人にしか見えないように
 する解決策を見つけたので
書いていきます ↓ ↓ ↓

##CloudFirestoreの構造

cloud1

このように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

8
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?