【Flutter】firestoreのオフライン対応に関するメモ
オフラインでもアプリが使えるようにローカルDBを導入しているが、端末変更時の引き継ぎのため、firestoreも併用している。
ベストプラクティスかどうかはわからないが、データ登録・更新・削除時に、ローカルDBとfirestoreの両方に対して処理を実行し、常にローカルDBとfirestoreの内容が一致するようにしている。
ここで問題になるというか考慮するべきなのが、オフラインの状態でデータに変更を加えた際に、ローカルDBとfirestoreに差分が生じてしまうことかなと思う。
この辺のケアは大変そう・・・と思ったが、firestoreにはデフォルトで、オフラインでもよしなにやってくれる機能が備わっていたので、特に問題はなかった。
実際にオフライン状況下でデータの変更を行うとどうなるのか?メモとして書き留めておく。
オフライン状態でデータ変更→アプリを閉じずにオンラインに戻す
オンラインに戻したタイミングで、firestoreにも変更が反映された。
ちなみに、firebase storageに画像もアップロードしているが、そちらも正常に反映された。
どれぐらいの時間オフラインにしても問題ないのか?
そこまでは調査していないが、公式のドキュメントや動画を見る限り、通常の利用範囲であれば問題はなさそう。
オフライン状態でデータ変更→アプリkill→オンライン状態で再起動する
アプリをkillしてしまうと、オンラインに戻しても反映されないかと思ったが、そんなこともなかった。
ただ、少し挙動が違った。
先ほどの「アプリをkillせずにオフライン→オンラインにした場合」には、オンラインに戻したタイミングでfirestoreに変更が反映されたが、
「アプリをkillしてからオンラインに戻した場合」は、
オンライン状態でデータの変更をしたタイミングでまとめて反映された
アプリkillだけでなく、端末(iPhone 11 pro)の電源をオフにするというのも試してみたが同様だった。
まとめ
一時的にオフラインになったとしても、オンライン環境下での継続的なアプリ利用があれば、ローカルDBとfirestore間でのデータの同期は、特に心配しなくても大丈夫そう。
現在本アプリは開発段階なので、実際の運用の中で問題が発生して場合は、こちらに追記していく予定。
firestoreドキュメント
Discussion