Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloud Firestore(の、スタブ)を作ってみた / Stubbing Cloud F...

Hiron
December 08, 2017

Cloud Firestore(の、スタブ)を作ってみた / Stubbing Cloud Firestore

Mobile Act OSAKA #2で発表したスライドです。

Hiron

December 08, 2017
Tweet

More Decks by Hiron

Other Decks in Technology

Transcript

  1. About Me • Twitter、GitHub、Qiita、
 SlideShare、Speaker Deck: ➡ hironytic • At

    work: ➡ iOS (Objective-C)、
 ときどき Android (Java)、
 Windows UWP(C#) • At home: ➡ iOS (Swift) ひろん
 (一宮 浩教)
  2. Firebase •Remote Config •App Indexing •Dynamic Links •Invites •AdWords •AdMob

    •Analytics Develop Grow Earn •Cloud Messaging •Authentication •Realtime Database •Cloud Firestore (beta) •Storage •Hosting •Test Lab •Crash Reporting Oct.4, 2017
 Mobile Act OSAKA #1
  3. サブコレクション { "name": "general" } CSP36ah { "name": "random" }

    CSP4CQz channels messages { "from": "AAd7UZv", "message": "何してますか?忙しいですか..." } MV5ahcO { "from": "nvGvwR5", "message": "昼寝してた" } MV5yaC0 { "from": "AAd7UZv", "message": "近くのコンビニエンスストアで..." } MV6Almn { "from": "nvGvwR5", "message": "まかせといてよ" } MV6L38V messages ...
  4. データのリアルタイム取得 Firestore.firestore() .collection("users") .whereField("age", isGreaterThan: "18") .order(by: "age") .order(by: "name")

    .addSnapshotListener{ snapshot, error in // snapshot?.documents[0].documentID ... String // snapshot?.documents[0].data() ... [String: Any] } クエリ
  5. /channels /channels/CSP36ah/messages Observable<[Entity]> Observable<[Entity]> スタブるぞ • DataStoreQueryに応じて、 フィルタ、ソートを行う Observableをmapで変換し て返す

    StubDataStore filter(...) sorted(...) Observable<[Entity]> func observeCollection(matches query: DataStoreQuery) -> Observable<[Entity]> map
  6. /channels /channels/CSP36ah/messages Observable<[Entity]> Observable<[Entity]> filter(...) sorted(...) Observable<[Entity]> map スタブるぞ •

    元のObservableに更新が 流れれば、さっき返した Observableにも自動的に (リアルタイムに)更新 が流れる StubDataStore ✨ ✨