🐈

【Flutter】firestoreのオフライン対応に関するメモ

2021/04/04に公開

オフラインでもアプリが使えるようにローカルDBを導入しているが、端末変更時の引き継ぎのため、firestoreも併用している。

ベストプラクティスかどうかはわからないが、データ登録・更新・削除時に、ローカルDBとfirestoreの両方に対して処理を実行し、常にローカルDBとfirestoreの内容が一致するようにしている。

ここで問題になるというか考慮するべきなのが、オフラインの状態でデータに変更を加えた際に、ローカルDBとfirestoreに差分が生じてしまうことかなと思う。

この辺のケアは大変そう・・・と思ったが、firestoreにはデフォルトで、オフラインでもよしなにやってくれる機能が備わっていたので、特に問題はなかった。

実際にオフライン状況下でデータの変更を行うとどうなるのか?メモとして書き留めておく。

オフライン状態でデータ変更→アプリを閉じずにオンラインに戻す

オンラインに戻したタイミングで、firestoreにも変更が反映された。
ちなみに、firebase storageに画像もアップロードしているが、そちらも正常に反映された。

どれぐらいの時間オフラインにしても問題ないのか?
そこまでは調査していないが、公式のドキュメントや動画を見る限り、通常の利用範囲であれば問題はなさそう。

オフライン状態でデータ変更→アプリkill→オンライン状態で再起動する

アプリをkillしてしまうと、オンラインに戻しても反映されないかと思ったが、そんなこともなかった。
ただ、少し挙動が違った。

先ほどの「アプリをkillせずにオフライン→オンラインにした場合」には、オンラインに戻したタイミングでfirestoreに変更が反映されたが、
「アプリをkillしてからオンラインに戻した場合」は、
オンライン状態でデータの変更をしたタイミングでまとめて反映された

アプリkillだけでなく、端末(iPhone 11 pro)の電源をオフにするというのも試してみたが同様だった。

まとめ

一時的にオフラインになったとしても、オンライン環境下での継続的なアプリ利用があれば、ローカルDBとfirestore間でのデータの同期は、特に心配しなくても大丈夫そう。

現在本アプリは開発段階なので、実際の運用の中で問題が発生して場合は、こちらに追記していく予定。

firestoreドキュメント

https://cloud.google.com/firestore/docs/manage-data/enable-offline?hl=ja

Discussion