iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Cloud Firestore

【Android】Firestoreでバッチ書き込みを行う

本日は、Firestoreの不可分操作の一つである、バッチ書き込みを使ってみたいと思います‍♀️ 不可分操作(アトミックオペレーション)は、複数の操作を一つの操作として扱うことで、全ての操作が成功、又は失敗するように処理を行うことを指します。Firestoreで…

【iOS】Firestoreで強制アップデート機能をつける

Firestoreを使って、アプリ側の強制アップデート機能を実装したので、今回はその方法を簡単に紹介していきたいと思います‍♀️ それではやっていく まず重要なのは、現在のバージョンが必須バージョンを満たしているかどうかの条件分岐です。これは以前のブロ…

【Firestore】Date型でクエリカーソルを使用する時の注意点

先日、Firestoreのクエリカーソルを日付で追加してデータを取得しようとすると、指定した位置のドキュメントがうまく取得できなかったのでメモを残しておきます‍♀️ let startDate = Date() db.collection("cities") .order(by: "serverDate") .start(at: [st…

【Firestore】セキュリティルールの便利な関数たち

get() 指定したパスのドキュメントの情報を取得します。例えばusersコレクションのhogeというドキュメントのnameフィールド値を取得したい場合は下記のようになります。 allow read: if get(/databases/$(database)/documents/users/hoge).data.name == 'hog…

【Javascript】 FirebaseError: Function DocumentReference.set() called with invalid data. Unsupported field value: a custom object の対処法

Firestore のセキュリティールールで使用するテストオブジェクトの GeoPoint を下記のように設定するとエラーが発生していました const { GeoPoint } = require("@google-cloud/firestore"); function fieldMapData(fieldId) { return { id: fieldId, name: …

【Firestore】特定のフィールドのみ書き込めるようにする

先日に引き続き今日も Firestore のセキュリティルール について書いていきたいと思います 今回はタイトルの通り、Firestore のドキュメントに書き込めるフィールドのバリデーションを行っていきたいと思います。 それではやっていく ということで、「こんな…

【Firestore】セキュリティールールでデータの undefined 判定

先日 Firestore のセキュリティールールで undefined かどうかの判定をするために下記のようなコードを書いていました function isUndefined(data) { return data.hoge == undefined; } 実はこれ正しく動作しないので注意が必要です。サンプル実装などによく…

【Firestore】Swift で該当する月のデータを取得する

今回は、Firestore に保存されているデータで、該当する月のデータのみを取得してくる方法のサンプルを紹介していきたいと思います。 結論 サンプル実装は、Ballcap という Firestore のラッパーライブラリを使っていますが、基本的にやることは同じで isGre…

【Firestore】複合インデックスを作ってみる

みなさん、Firestore は使っていますか?僕は、個人で開発中のアプリでがっつり利用させてもらっている(Firebase信者)ので日々 Firestore と格闘しています 今回はそんな Firestore で複合インデックスを作成する機会があったのでメモしておきます。 複合イ…

【Kotlin】java.util.NoSuchElementException: List is empty

先日、Kotlin で Firestore を用いて Collection を取得していると下記のような Error に遭遇しました 2020-12-13 11:42:44.547 22551-22551/com.YamatoOtaka.androidsample1 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.YamatoOtaka.androidsamp…

Kotlin で Firestore から取得したデータを DocumentID 付きのモデルにマッピングする

今日は、タイトルの通り Firestore から取得したデータ(SnapShot)を DocumentID 付きのカスタムクラスに変換する方法を紹介します‍ それではやっていく まずは、データをマップするクラスを作成します。以前の記事でも紹介したように、マップするクラスはデ…

Android(Kotlin) で Firebase Firestore を使ってデータを取得するまで

今回は、Android(Kotlin) で Firestore を使ってデータを取得するまでの手順を簡単に紹介したいと思います 前提条件 APIレベル16(Jelly Bean) 以降が対象 Gradle 4.1 以降 Jetpack(AndroidX) を使用 新規 Firebase プロジェクト作成済み Android アプリも登…

Cloud Firestore のセキュリティルールでよくやる書き方

今回は、Cloud Firestore のセキュリティルールでよく書く記法などをまとめていきたいと思います。(他にもでてきたら随時更新していく) 認証系 認証しているユーザのみ読み取りが可能になります。 service cloud.firestore { match /databases/{database}/do…

Firebase Error: Could not start Firestore Emulator, port taken. の対処法

firebase emulators:start --only firestore コマンドで Firestore エミュレータを起動しようとしたら下記のような Error が $ firebase emulators:start --only firestore i emulators: Starting emulators: firestore i emulators: Shutting down emulator…

Cloud Firestore でセキュリティールールを作ってテストするまで

セキュリティルールとは? Cloud Firestore のドキュメント DB に関してかけられる制約のことです。これによってサーバ側の認証・承認などのコードを作成する必要がなくなります。また、認証という役割だけではなく DB に対するデータの制約なんかもこのセキ…

Cloud Firestore 概要

Cloud Firestore とは? 高速でサーバレスなクラウド NoSQL ドキュメントデータベースです。Firebase Realtime Database と同様にスキーマレスかつリアルタイムにデータを監視することができます。 公式ドキュメント https://cloud.google.com/firestore/doc…