前提・実現したいこと
Firestoreを使って、フォロー機能を実装しています。
マイページで、フォロワーを表示させたいです。
発生している問題・エラーメッセージ
TestFlight経由でインストールしてもらった開発者以外のユーザー(テスター)に限り、 ユーザーをフォローしても、そのユーザーのフォロワーリストに表示されないという事象が発生しています。 例) ユーザーAをフォローしているユーザーB(開発者のgoogleログイン、メールリンクログイン) ⇨ユーザーAのフォロワーリストにはユーザーBが表示される ユーザーAをフォローしているユーザーC(TestFlight経由テスターのgoogleログイン、メールリンクログイン) ⇨ユーザーAのフォロワーリストにユーザーCが表示されない Firestoreからフォロワーデータを取得した際にデバックをしてみたところ、 テスター(ユーザーC)だけデータが取得できていません。 しかし、添付画像のように、Firestoreの中身は同じデータが入っています。 また、テスター(ユーザーC)のフォローリストには正しく表示されています。 ルールの設定は、user下、follow下両方において、 認証されているユーザーならread,create,update,delete全て許可されています。 原因がさっぱりわかりません。 可能性や憶測等でも構いませんので、ご教授いただけますでしょうか。
該当のソースコード
//フォロー時のメソッド func addFollow() { let followedUser = self.ownerID let user = Auth.auth().currentUser!.uid let dataStore = Firestore.firestore() //自分のサブコレクションに登録 let db = dataStore.collection("user").document(user).collection("follow").document(followedUser) db.setData([ "id": followedUser, "uid": user, "userName": self.username, "profileImage": self.pI ]) } //フォロワーを取得するメソッド func follower() { let user = Auth.auth().currentUser!.uid let db = Firestore.firestore() //フォロー時に作成したfollowサブコレクションの中から、collectionGroupを使って、データを取得 self.messageListener = db.collectionGroup("follow").whereField("id", isEqualTo : user) .addSnapshotListener { snapshot, error in if let snapshot = snapshot { self.followers = snapshot.documents.map{ message -> Follow.Data in let data = message.data() return Follow.Data( id: data["id"] as! String, profileImage: data["profileImage"] as! String, userName: data["userName"] as? String ?? "nil", uid: data["uid"] as! String ) } self.followerList.reloadData() } } } //Followのクラス class Follow { struct Data { var id: String var profileImage: String var userName: String var uid: String } }
試してみたこと
collection名、document名、サブコレクション名を直接指定してgetDocumentしてみたら、フォロワー取得メソッドを何も変更しなくても取得できるようになりました。1度getDocument等でアクセスをしないとcollectionGroupではデータが取得できないのでしょうか??
2020/4/2追記
テストを続けていく中で、取得できなかったのはテストフライト経由だけではなかったことが分かりました。getDocuments等で一度各ユーザーのサブコレクションのデータにアクセスしてから、取得するメソッドを走らせると全件取得できました。。。
あなたの回答
tips
プレビュー