Firestoreで作るオフライン动作対応のiOSアプリ

2017年10月3日に,GoogleからFirebase实时数据库の后継にあたるCloud Firestoreが発表されました。

Cloud Firestoreのご绍介:アプリ用の新しいドキュメントデータベース
baseの记事はプロダクトマネージャー,Alex Dufetel Fire Firebase博客の记事“ Cloud Firestore简介:我们针对…的新文档数据库” developer-jp.googleblog.com Cloud Firestore | 火力基地
使用我们灵活的,可扩展的NoSQL云数据库来存储和同步数据,以进行客户端和服务器端开发。 firebase.google.com

今,実际に开発中の未リリースのiOSアプリに导入していて色々知见が贮がきていてのですが,本记事では特にFirestoreのオフライン动作サポート周りについて焦点を当てていきます。

2017/12/01时点で,Firestoreはまだベータ版なのでプロダクション利用は慎重に検讨することをおすすめします。

初步き:Firestoreをざっと绍介

本主题の前にFirestoreをざっと绍介します。GoogleDevelopersGoogleログによると次のように绍介されています。

世界规模でアプリデータを简タを格纳して同时できるようにデザインされており,ベータ版として利用できるようになりました。

Firebaseサービス配下には元々似たものとして实时数据库があります(というより,Googleに2014年に买收される前はこれこそがFirebaseでした)。数据库に比べて,主に次の点で优れています。

  • 保存できるデータ型が増えた
  • クエリ・ソートの强化
  • スケーラビリティが青天井に
  • 自动マルチリージョン
  • わりにクション构造がネストしていても重くならない(代わりに适宜明示的に取得处理が必要)
  • コストは概ね安い(ただし,料金体系ががらりと変わっているため使い方次第で逆転もあり得る)

タータ构造が,实时数据库ではJSONツリーでしたが,Firestoreではドキュメ指向指向データベース(Datastoreをラップしたもの)に変わったことが大きく影响しています。で强化・再设计した感じで,とても良い买收后の流れだったと感心しています(・‿・`)
(Facebookに买收されたあと消灭したParseとは対照的。)

次の记事・资料を见るとイメージが涌くかと思います。

  • Cloud Firestoreは进化したFirebase实时数据库— Qiita
  • Firebase RTDB + GCP数据存储= Firestoreについて第一印象— Qiita
  • Firebaseの新しいデータベース— Slideshare

实时数据库はちょくちょく辛いところがあったようですが,Firestoreは痒いところに届くようになって,通常のモバイルアプリの多くのユースケースは何とかなると感じています(ただしデータ构造设计は重要)。

,より包括的・実践的な记事は后日こちらに书きました。

Cloud Firestoreの勘所所ート1
Cloud Firestoreの概要 medium.com

Cloud Firestoreで,従来のローカルデータベースタベ现していたものと同等のオフライン动作サポート可能か?

して本题の,Firestoreで作るオフライン动作対応のiOSアプリについてです。

仆が今开発中のアプリでは,そういったお驯染みのローカルデータベースを使わずに,データ周りはFirestoreにすべて頼るようにしました。この际,最も気になったのは,本当にFirestoreのオフライン动作サポートで,従来のローカルルータベスと同等のユーザー体験を担保できるかという点でした。

オフライン动作が具体的に指すもの

オフライン动作サポートは主に次のようなケアをしてユーザー体験向上を実现するものだと考えています。

  • アプリ起动直后・画面切り替え直后など,ネットワーク通信完了前に即座にキャッシュ済みのコンテンツ表示してユーザーの待ち时间を减らす
  • オフライン时の操作を可能とする

従来のローカルデータベースを使う场合のオフライン动作対応

また,従来のローカルデータベースタベ使った场合,REST APIサーバーとのやり取り含めた一般的な处理の流れは,ざっくり次のようになっています。

  1. Web APIを叩いてレスポンス取得
  2. にスポンスをローカルデータベースー永に化しつつ画面侧に返す
  3. コンテンツ表示
  4. 以降は,キャッシュ済みのものはWeb APIのレスポンスを待たずして即时表示可能

単にWeb APIから获得したコンテンツ表示するためだけにはローカルデータベースは必须ではなく,主にオフライン时のユーザー体験を少しでも上げるための工夫だと认识しています。によってまちまちです。

  • 一个:ローカルデータベースを全く使わずに常にAPIレスポンス頼り
  • B:マスター系のデータ(ユーザーデータなど)のみローカルルーデースを用いて,トランザクション系のデータ(フィードなど)はAPIレスポンス頼り
  • C:(ほぼ)すべてのデータをローカルデータベースに保存

下に行くほど手厚いオフライン动作サポートとなり,个人的には多少工数がかかりつつもCを选択することが多いです。