Firebase
初めてでも大丈夫、Firebaseの使い方とハマるポイントを解説!
自己紹介
名前
古賀 友規
所属
株式会社ビズリーチ
スタンバイ事業部/アプリエンジニア
出身地
福岡
こんなん作ってます
リニューアル当初導入した機能
● Analytics
● Cloud Messaging
● Notifications
● Remote Config
現在使用している機能
● Analytics
● Cloud Messaging
● Notifications
● Remote Config
● Authentication
● Realtime Database
● Dynamic Links
● Invite(今後導入予定)
現在使用している機能
● Analytics
● Cloud Messaging
● Notifications
● Remote Config
● Authentication
● Realtime Database
● Dynamic Links
● Invites(今後導入予定)
本日お話しする部分}
Firebaseについて
Firebaseって何?
BaaS (Backend as a Service)のひとつ
料金は?
無料で使える機能と有料の機能
無料で使える機能
● Analytics
● App Indexing
● Authentication
● Cloud Messaging
● Crash Reporting
● Dynamic Links
● Invites
● Notifications
● Remote Config
有料の機能
● Realtime Database
● Storage
● Hosting
● Test Lab
● Google Cloud Platform (BigQuery etc)
Firebase Analytics
Analyticsの特徴
AnalyticsはFirebaseのコアとなる機能!
Analyticsの特徴
● 他の機能と連携可能
● イベントベースの計測
● iOS / Android対応
● 料金は無料!(*)
* BigQueryを使う場合は別途料金が発生
Analyticsの導入(iOS)
1. CocoaPods経由でSDKをインストール
2. AppDelegateでSDKを初期化
application:didFinishLaunchingWithOptions:メソッド内に実装
# Podfile
pod ‘Firebase/Core’
# pod install
FIRApp.configure()
Analyticsの導入(Android)
1. Gradle経由でSDKをインストール
# build.gradle
compile 'com.google.firebase:firebase-core:9.6.1'
イベントを送る
● iOS
● Android
FIRAnalytics.logEventWithName(kFIREventSelectContent, parameters: [
kFIRParameterContentType:"image",
kFIRParameterItemID:"1"
])
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, “1”);
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
イベントには2種類ある
● 手動で送るもの
● 自動で送られるもの
イベントには2種類ある
自動で送られるイベントの一例
● first_open
● session_start
● notification_open
自動で送られるイベントの一覧
https://support.google.com/firebase/answer/6317485?hl=ja&ref_topic=6317484
イベント名・パラメータ名には2種類ある
● 独自に定義するイベント・パラメータ
カスタムイベント・カスタムパラメータ
● デフォルトで用意されているイベント・パラメータ
イベント名・パラメータ名には2種類ある
デフォルトで用意されているイベント・パラメータの一例
デフォルトで用意されているイベント・パラメータの一覧
https://support.google.com/firebase/answer/6317498?hl=ja&ref_topic=6317484
イベント名 パラメータ名
select_content content_type、item_id
add_to_cart quantity、item_category、item_name、item_id、item_location_id、
value、price、currency
イベントを送る際の制限
ハマりポイント!
パラメータとして送る値は「36文字」までの制限がある
エラーログを見落とさないように!
他にもある制限
イベント登録数 500
イベントに付与するパラメータ数 25
ユーザープロパティ登録数 25
ユーザーリスト登録数 50
ユーザープロパティを設定する
● iOS
● Android
FIRAnalytics.setUserPropertyString(food, forName: "favorite_food")
mFirebaseAnalytics.setUserProperty("favorite_food", mFavoriteFood);
Webコンソールの機能
5つの切り口から分析を行える
● イベント
● ユーザー
● アトリビューション
● 目標到達プロセス
● コホート
イベント
イベント
イベント
● イベント数
● ユーザー数
● ユニークユーザー数
● セッションあたりのイベント数
● イベントが発生した国や地域
● イベントを発生させたユーザーの属性(性別・年齢)
*カスタムパラメータ値は見ることができません
ユーザー
指定した条件でユーザーをセグメントできる機能
ユーザーリストに日々追加されるユーザー数の推移や、リストに含まれるユーザーの
属性をレポート画面から確認できる。
作成したユーザーリストを使って、Analytics以外の機能と連携できる。
例)プッシュ通知を送る等
ユーザー
ユーザー
ハマりポイント!
ユーザーリストを作成した時点では、ユーザーリスト中のユーザー数は0
作成以降に、その条件に合致するユーザーが発生しないとユーザーリスト中のユー
ザーは増えない
また条件を満たさなくなっても、ユーザーリストから除外されることはない。
アトリビューション
どのソース・広告ネットワークからのユーザーがコンバージョンを生んでいるか分析で
きる機能
目標到達プロセス
一連のステップ(イベント)の完了率を可視化して分析できる機能
コホート
ユーザーの維持率を分析する機能
マイレポート
マイレポートで確認可能な項目
● アクティブユーザー数
● 平均収益(ARPU / ARPPU)
● ライフタイムバリュー (LTV)
● 維持率コホート
● ユーザーエンゲージメント(平均セッション継続時間等)
● アプリバージョン
● デバイス(モデル・OSバージョン)
● 場所(国・地域)
● ユーザー属性(年齢・性別)
詳細な分析をするには?
BigQueryを使いましょう!
計測したデータはすべてBigQueryに格納されている
スタンバイでの
事例
デイリーでデータを
エクスポート
Redshiftからデータを
取得して可視化
Cloud Messaging / Notifications
Cloud Messaging (FCM) の特徴
● クロスプラットフォーム対応の通知ソリューション
iOS / Android / Chrome (Web Push) に対応
● プラットフォーム毎のメッセージの差異はFCMが吸収
● HTTP/XMPPプロトコルによるメッセージの送信
● 無料!
使い方
下記エンドポイントにPOSTでメッセージを送信する
https://fcm.googleapis.com/fcm/send
宛先には、いづれかを指定可能
● 通知トークン
● 通知キー
● トピック
その他の指定可能なパラメータ
https://firebase.google.com/docs/cloud-messaging/http-server-ref
メッセージの種類
通知 データ 通知+データ
notificationのみを含むメッセー
ジ
dataのみを含むメッセージ notificationとdataの両方を含む
メッセージ
{
"to" : "bk3RNwTe3H0:CI2k_HH...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark"
}
}
{
"to" : "bk3RNwTe3H0:CI2k_HH...",
"data" : {
"Nick" : "Mario",
"body" : "great match!"
}
}
{
"to" : "APA91bHun4MxP5ego...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark"
},
"data" : {
"Nick" : "Mario"
}
}
メッセージの種類によって処理方法が違う
@Android
アプリの状態 通知 データ 通知+データ
フォアグラウンド onMessageReceived onMessageReceived onMessageReceived
バックグラウンド システムトレイ(*) onMessageReceived システムトレイ(*)
* アプリがバックグラウンドの状態で通知を受けると、 onMessageReceivedでメッセージが処理されず、
そのままシステムトレイに通知が入る。
システムトレイに表示されるアイコンが変
@Android
何のアイコンが使われるのか?
manifestのapplicationに指定しているランチャーアイコンが使われる。
ただし、そのまま使われる訳ではない!
manifestで指定している
ランチャーアイコン
Notification作成時に指定している
アイコン
システムトレイに表示されるアイコンが変
@Android
通知メッセージにiconの情報を含めてあげれば任意のアイコン(*)を指定できる。
*drawable内にあるアイコンファイル名を指定します。
{
"to" : "bk3RNwTe3H0:CI2k_HH...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon": "ic_lancher"
}
}
システムトレイに表示されるアイコンが変
@Android
ちなみに。。
WebのNotificationsから送る場合はアイコンの指定ができません。
その場合は諦めるか、ランチャーアイコンを差し替えましょう。
システムトレイに直接入ったメッセージを開いた時
に任意のActivityを開くには?@Android
通知メッセージとアクティビティを繋ぐための情報を追加する。
<activity android:name=".HogeActivity"
android:label="@string/title_activity_hoge" >
<intent-filter>
<action android:name="HOGE_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
システムトレイに直接入ったメッセージを開いた時
に任意のActivityを開くには?@Android
通知オブジェクトに開きたいアクティビティの情報を付与する。
{
"to" : "APA91bHun4MxP5ego...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"click_action": "HOGE_ACTIVITY"
},
"data" : {
"Nick" : "Mario"
}
}
システムトレイに直接入ったメッセージを開いた時
にデータを参照するには?@Android
Intentのextrasから参照することができます。
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("parameter");
Log.d(TAG, value);
}
データメッセージが届かない?!
@iOS
アプリの状態 通知 データ 通知+データ
フォアグラウンド APNs FCM APNs
バックグラウンド APNs FCM APNs
データメッセージが届かない?!
@iOS
FCMに接続するコードを書いておきましょう!
詳細なサンプルコードについては以下の URLを参照
https://github.com/firebase/quickstart-ios/blob/master/messaging/FCMSwift/AppDelegate.swift
FIRMessaging.messaging().connectWithCompletion { (error) in
guard let error = error else {
print("Connected to FCM.")
return
}
print("Unable to connect with FCM. (error)")
}
Notificationsの特徴
● Webのコンソールから通知を送信することが可能
● シンプルな操作
HTTP APIで可能な細かい設定はできない
Notificationsでのみ可能な操作
1. 通知ターゲットの指定
ユーザーリスト、特定アプリバージョン、特定言語に対する配信
2. 開封率・コンバージョン率の計測
3. 予約配信
Notificationsが送信するメッセージの種類
以下の2パターンのみです。
● 通知
● 通知+データ
Notificationsではデータのみのメッセージを送ることはできません。
現在GCMを使っている場合はどうする?
@Android
GCMの処理を丸ごとFCMに置き換えることができます。(*1)
FCMはGCMと互換性があります。
そのため、FCMトークンをGCMで使うこともできます。(*2)
*1. マイグレーションガイドがあります
https://developers.google.com/cloud-messaging/android/android-migrate-fcm
*2. FCMトークンをGCM用のAPIに渡しても正常にプッシュ通知が飛ぶことを確認しました。
https://gcm-http.googleapis.com/gcm/send
Remote Config
Remote Configの特徴
● アプリのリリースなしに設定変更が可能
● Webのコンソールで簡単に設定変更が可能
● それぞれの条件に応じた設定値を持つことが可能
Remote Configを設定する
パラメータキーとデフォルト値を設定するだけ!
それぞれの条件に応じた設定値を持たせる
条件に応じて設定値を出し分けるための手順
1. 条件を作る
2. 条件に合致した時の値を設定する
それぞれの条件に応じた設定値を持たせる
設定可能な条件
● アプリID
● アプリバージョン
● OSの種類
● ユーザー(ランダム%)
● ユーザーリスト
● 端末の地域/国
● 端末の言語
● ユーザープロパティ
それぞれの条件に応じた設定値を持たせる
それぞれの条件に応じた設定値を持たせる
活用事例①
コンテンツ内容のコントロール
活用事例②
アプリの強制バージョンアップ

今からでも大丈夫!Firebase入門