iOSエンジニアのつぶやき

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

Firebase

【30C】 Firebase Local Emulator Suiteの序章

本日は、今まで全く触れたことのないFirebase Local Emulator Suiteについて、さらっと調べた概要をメモしておきます Firebase Local Emulator Suiteとは? Firebase Local Emulator Suiteは、Firebaseで提供されている各機能をローカルでビルド及びテストす…

【30C】Firebase Predictionsとは?

本日は久しぶりに30分チャレンジをしてみたいと思います‍♂️ 今回のお題はFirebaseの「Firebase Predictions」についてです。それではやっていきましょっ Firebase Predictionsとは? Firebaseが提供する、ユーザセグメントを作成するための機能で、アプリな…

【FirebaseAnalytics】UserPropertyに数値ってどうやって設定するの?

A/B Testingでユーザを絞り込む際、UserPropertyを使ってユーザを絞り込もうとしていましたが、その際の条件設定に数値を扱うための演算子があり、この数値の値はどこから設定することができるのか分からなかったのでメモ‍♂️ 結論 クライアント側からはStrin…

Firebase A/B Testingのアクティベーションイベントをちょっと勘違いしていた

Firebase A/B Testingを使うにあたり、アクティベーションイベントの役割を少し勘違いしていたので、メモ‍♀️ 何を勘違いしていた? アクティベーションイベントは、ユーザを A/B テストの対象にするためのトリガーイベントだと思っていましたが、試しにテス…

Firebase A/B Testing をちょっと調べた

最近 Firebase A/B Testingを触る機会があったので、調べたことをちょっとメモしておきます‍♂️ Firebase A/B Testingとは? Firebase が提供する A/B テストの手法で、AまたはBのタイプでどちらの方がCVRがいいのかを分析し、プロダクトを最適化することがで…

【Firebase】Firebase Dynamic LinksのURL手動構築

以前の記事をアップデート版を書く機会があったので再投稿‍♂️ yamatooo.blog Firebase Dynamic Links Firebase Dynamic Linksは、Firebaseが提供するDynamic Links機能で、ユーザがリンクを開いた時の挙動をネイティブアプリのインストール状況などに応じて…

【Firebase】CloudFunctionsでメンテナンス中画面にリダイレクトさせる

今回は、下記のようなCloudFunctionsdeNext.jsがホストされている状態を想定してメモしています‍♀️ const { join } = require('path') const { https } = require('firebase-functions') const { default: next } = require('next') const nextjsDistDir = j…

【Firebase】FirebaseDynamicLinksの動的生成が意外と楽だった

FirebaseDynamicLinksを動的に生成する方法が、予想と反して意外とシュッとできそうだったのでメモ‍♀️ 【おさらい】そもそもFirebase Dynamic Linksとは? 以前にかる〜く触れたので、下記を参考にしてみてください。 yamato8010.hatenablog.com 要は、アプ…

【Firebase】Next.jsをCloudFunctionsでホストさせる

next.jsにサンプルがあるので、これを使っていきます! github.com まずは、サンプルをインストールします。ちなみにAPP-NAMEは、よしなに変えてください。今回はnpmで作業します。ちなみにyarnがない場合は、yarnpkg install has failed.的なエラーが出るの…

【30C】Firebase Dynamic Links について調べる

本日から30Cと題して、30分で使ったことのない技術について超ざっくりとキャッチアップする連載をして行きたいと思います‍ ということで、1回目は 「Firebase Dynamic Links」 から!実際に使ってみたら、また記事にします。 そもそもディープリンクとは? …

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

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

【Firebase Authentication】KotlinでSignIn・SignUp

Android・Kotlinで、Firebase Authenticationを使った、メールアドレスによるSignIn・SignUpの実装をしたので、簡単に手順をまとめてみたいと思います‍♀️ やっていく まずはFirebase Authentication Androidライブラリを、アプリレベルのGradleファイルに記…

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

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

【Firebase】Storageルールの管理を途中からする

既存のFirebaseプロジェクトのStorageルールを途中から追加したので、そのメモを‍♀️ Storageルールの追加 とりあえず、storage.rulesファイルをルートに作成します。 次にfirebase.jsonで、作成したStorageルールのファイルを指定します。 // ... "storage":…

【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; } 実はこれ正しく動作しないので注意が必要です。サンプル実装などによく…

【Node.js】Functions でユーザが通知を有効にしている場合にプッシュ通知を送信するやつをやってみた

今回は Firebase Firestore であるドキュメントが作成された時、ユーザの通知設定に応じて通知も送信をハンドリングする実装を行ったので、簡単に記事にまとめてみようと思います‍♀️ それではやっていく 今回は、一般的にありえそうな下記のようなユースケー…

【FCM】Functions 経由でトピック通知を登録する

今回は Firebase Cloud Messaging のトピック通知を Functions 経由で登録する方法を紹介していきたいと思います‍ それではやっていく Node.js で実装していくので、とりあえず Firebase の Admin SDK を導入し、初期化します。 $ npm install firebase-admi…

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

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

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

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

FirebaseFunctions に環境変数を設定する

今日も短い内容ですが、Functions の Tips です やっていく‍ 下記が product エイリアスに service_name.key_name の環境変数を設定する例になります‍♀️ $ firebase functions:config:set service_name.key_name="hogehoge" --project=product 確認する時は…

【Swift】Firebase Storage で JPEG ファイルをアップロードする

今日はタイトルの通り、Firebase Storage で JPEG ファイルを Swift でアップロードする方法を紹介したいと思います‍♀️ 使ったもの 今回の実装をする上で使用したものは下記になります。 Firebase/Storage 6.34.0 RxSwift 6.0.0-rc.1 Xcode12.0.1(Swift5.3) …

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

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

Firebase で Sign in with Apple 🔥

みなさん、おはようございます。今年も Qiita Advent Calendar に申し込みましたが、ネタが無い Yamato です‍ ということで、今回はタイトルの通り Firebase で Sign in with Apple を実装する手順を紹介していきたいと思います。 前提 iOS13 以上をアプリタ…

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

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

Error packaging up the application の対処法

今回は、Firebase App Distribution を使った Staging アプリの配信で詰まっていた Error packaging up the application の対処法について簡単にまとめます。 起こっていたこと Staging アプリの Bundle ID の変更に伴い、証明書の発行や Firebase の設定な…

Firebase + BigQuery + Redash で分析基盤を作ろう

Firebase + BigQuery + Redash で分析基盤を作ろう 今回は、Firebsae Analytics で取得しているデータを Big Query + Redash を使って可視化できるようにする方法を簡単にまとめていきます。 手順 Firebase と BigQuery 連携 BigQuery と Redash 連携 Fireba…

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

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