はじめに
CloudFirestoreを使用してFirestore.firestore()
でqueryを生成しデータアクセスをする際に、whereFieldやorderでデータの絞り込みや順番を変更することができます。この際に、指定条件によってはIndexの生成をコンソール経由で下記のように提案されます。
[Firebase/Firestore][I-FST000001] Listen for query at Data failed: The query requires an index. You can create it here: https://console.firebase.google.com/project/{project-name}/database/firestore/indexes?create_index=xxxxxxxxxxxxxxx
通常はyou can create it here:
以下のURLの遷移先のFirebase Console上でindexの生成が提案されるのですが、特定のケースでURL先への遷移がうまく行かないことがあったので、事象の原因と解消方法を記載します。
環境設定
以下の環境を使用しています。
- Xcode10.1
- Swift4.2
- FirebaseFirestore 1.0.2
発生事象および条件と解消方法
発生する事象は遷移後の画面がホワイトアウトし、正常に遷移できないというものです。
本事象は複数Googleアカウントを使用している場合に発生する可能性があります。
Index生成アドレスをブラウザに入力し、実際に遷移した後のURLを見るとわかりますが、下記のように/u/0/
がアドレス内に現れます。
https://console.firebase.google.com/u/0/project/{project-name}/database/firestore/indexes?create_index=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
元々のURLに /u/x
の指定がないため本事象が発生しているようです。
複数アカウントを使用していると、この部分が本来 /u/1
、 /u/2
などでなければならない場合があり、その場合に遷移に失敗してしまいます。
/u/0
を /u/{Number}
に書き換えれば問題なく遷移できました。({Number}部分は実際に使用しているアカウントのコンソール上から下記の画像のように確認できます)