PROGBLOG Developers Blog

空想家 Developers Blog

稼ぐ力? とにかくスキルが欲しい。

Firebase の push() で 自動でIDが付与される

はじめに

FirebaseRealtime Database で ログインしたユーザーが投稿できる仕組みを作成している。

ログイン、push() を用いユーザー投稿まではできた。

が、その際に生成されるJSON で思い通りにいかない点があった。

意図しない文字列が

ユーザー投稿テストをし、生成されたJSON を確認したところ、意図しない文字列階層ができている。

▽理想の配列

saite-name-rtdb
    ├ user-id
        ├ today
            ├ 0: "HELLO"
            └ 1: "GOODBYE"
        └ today
            ├ 0: "HELLO"
            └ 1: "GOODBYE"

▽実際の配列

saite-name-rtdb
    ├ user-id
        ├ -謎の文字列
            ├ today
                ├ 0: "HELLO"
                └ 1: "GOODBYE"
        ├ -謎の文字列
            ├ today
                ├ 0: "HELLO"
                └ 1: "GOODBYE"

コードに文字列を生成されるなんて記載はないので、原因はそれ以外だと思われる。

色々、模索しているとドキュメントに下記の記述あった。

マルチユーザー アプリケーションでリストにデータを追加するには push() メソッドを使用します。指定した Firebase 参照に新しい子が追加されるたびに、push() メソッドは一意のキーを生成します。この自動生成されたキーをリスト内の新しい各要素に使用することで、書き込みの競合を伴わずに複数のクライアントが同時に子を同じ場所に追加できます。push() によって生成される一意のキーはタイムスタンプに基づいているため、リストのアイテムは自動的に時系列で並べ替えられます。

つまりこれはFirebase 側の都合で生成された文字列であるとのこと。 いくらコードをいじっても解決できないので、注意が必要。

なお、この文字列を飛ばして子要素を取得する方法は別記事にて記載予定