質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

871閲覧

Firestore,サブコレクション,一部ユーザーの情報のみ取得できない

makemake

総合スコア7

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/03/23 19:10

編集2020/04/02 09:34

前提・実現したいこと

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等で一度各ユーザーのサブコレクションのデータにアクセスしてから、取得するメソッドを走らせると全件取得できました。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問