【Firebase Analytics】Universal Links/App Linksでアプリを起動した回数が知りたい

# はじめに
* この記事は[オールアバウトアドベントカレンダー](https://qiita.com/advent-calendar/2019/allabout)6日目の記事です。
* これまでモバイルアプリ(Android, iOS)の集計にGoogleアナリティクスSDKを利用していたのですが、**[2019年10月にGoogleアナリティクス開発者サービスSDKが終了](https://support.google.com/firebase/answer/9167112?ref_topic=6386699&authuser=1) しました（Googleアナリティクス 360 のユーザーのプロパティには影響はありません）**
* 今後のモバイルアプリ向けの集計は、Firebase SDKを利用して集計する**Firebase Analytics**に移行する必要があります
    * [Firebase 向け Google アナリティクスについて](https://support.google.com/analytics/answer/9165830?authuser=1)
* それに伴いFirebase Analyticsに移行したのですが、Universal Links/App Linksでモバイルアプリを起動したときのイベント数を分析する方法がわからなかったので、調べた結果を共有します

<font color="red">※仕様が変更される場合もあるので、必ず公式のマニュアルを参照しましょう！</font>

# 導入：Universal Links/App Linksとは
本記事ではあまり詳細に説明しませんが、ざっくり説明すると、Webとアプリ(iOS,Android)に対応しているサービスにおいて、Webの特定のURLにアクセスすると、下記のような動作をする仕組みのことです。

* アプリがインストールされている場合→アプリが起動する
* アプリがインストールされていない場合→Webページが開かれる

iOSではUniversal Links, AndroidではApp Linksと呼ばれています。
実装方法などは公式のドキュメントをご覧ください。
[Universal Links - Apple Developer](https://developer.apple.com/ios/universal-links/)
[Android アプリリンクの処理  |  Android Developers](https://developer.android.com/training/app-links)


# 結論：Universal Links/App Linksでアプリを起動したとき、firebase_campaignというイベントが自動計測される
いきなり結論ですが、Firebase Analyticsにおいて、Universal Links/App Linksでモバイルアプリを起動したときのイベントは、**firebase_campaign** というイベント名で計測されます。

実は公式のドキュメントをちゃんと読むとしっかり書いてあります。

> ユニバーサル リンクは、utm パラメータ（utm_source、utm_medium、utm_campaign）を含めるように設定することができます。関連データは [アトリビューション] レポートに表示されます。
> 
> ユニバーサル リンクの例:
> 
> http://my.app.link?utm_campaign=myappcampaign&utm_source=google&utm_medium=cpc
> 
> ユーザーがリンクをクリックすると、firebase_campaign イベントが上記のパラメータとともに記録され、キャンペーン関連のイベントについては次のデータが表示されます。
> 
> キャンペーン: myappcampaign
> 参照元: google
> メディア: cpc
https://support.google.com/firebase/answer/6317518?hl=ja

上記はUniversal Linksについてですが、App Linksについても同様のイベント名で集計されています。

> Android App Links は、utm パラメータ（utm_source、utm_medium、utm_campaign）を含めるように設定することができます。関連データは [アトリビューション] レポートに表示されます。
> 
> Android App Link の例
> 
> http://example.com/gizmos?utm_campaign=myappcampaign&utm_source=google&utm_medium=cpc
> 
> ユーザーがリンクをクリックすると、firebase_campaign イベントが上記のパラメータとともに記録され、キャンペーン関連のイベントについては次のデータが表示されます。
> 
> キャンペーン: myappcampaign
> 参照元: google
> メディア: cpc

このfirebase_campaignイベントは、Firebase Analytics側で自動的に集計されるイベントのひとつのようなので、Firebase Analyticsが導入されていればモバイルアプリ側で特別になにか実装をしなければならないということはありません。

ちなみにfirebase_campaignイベントで自動で記録されるパラメーターは `source、medium、campaign、term、content、gclid、aclid、cp1、anid` だそうです。
https://support.google.com/firebase/answer/7061705?hl=ja


# firebase_campaignイベントの内容はどこから確認できるのか？
それでは、このイベントによって集計された値はどこから確認できるのでしょうか？ ドキュメントには`関連データは [アトリビューション] レポートに表示されます。`と記載されています。

## Eventsレポートからは確認できない
サイドバーにある[Events]をクリックすると集計された各イベントの回数やパラメータ等を確認できるのですが、ここにはfirebase_campaignという名前のイベントは表示されていませんでした。

<img width="1412" alt="スクリーンショット 2019-12-05 21.30.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42852/ced4ab0c-3470-535a-e5cd-803a615e52a0.png">
※実際の数値等は隠しています

## Conversionsレポートでコンバージョンイベントに紐づく参照元として確認できた
サイドバーにある[Conversions]をクリックすると、コンバージョンイベントのレポート結果を閲覧できます。

例えばデフォルトでコンバージョンイベントとして用意されている **first_open**（アプリ初回起動）イベントを選択すると、画面下部あたりにそのコンバージョンイベントの参照元が表示されています。
この「参照元」パラメータが、firebase_campaignイベントで集計された`utm_source`の値だと思われます（違っていたら申し訳ありません…）

<img width="1245" alt="スクリーンショット 2019-12-05 21.37.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42852/38fa46bf-bf85-b39f-95a9-52d86c03690a.png">
※実際の数値等は隠しています

その他のFirebaseコンソール画面を調べてみたのですが、**これ以外の画面でfirebase_campaignイベントの計測結果を確認できる箇所が見つかりませんでした** :scream: 

この画面が`[アトリビューション] レポート`なのでしょうか？どの画面が該当の画面なのか、筆者にはわかりませんでした…。もしご存じの方がいれば、コメント等で教えていただけると大変喜びます :pray: 


しかし、この画面からは純粋な「モバイルアプリを起動した回数」を特定することができません…。


## BigQuery経由でfirebase_campaignイベントを集計してみた

いろいろ調べてみたのですが、Firebaseコンソール画面上でfirebase_campaignイベントの内容を確認する方法がわかりませんでした :cry: 
ですが、BigQueryからFirebase Analyticsの生データを分析できるので、そこから結果を確認することができました。

Firebase Analyticsで集計されたイベントの生データは、BigQuery経由でアクセスすることができます。
具体的な連携方法等は公式のドキュメントや他の方のQiitaの記事で確認していただければと思います。
[Firebase の BigQuery Export - Firebase ヘルプ](https://support.google.com/firebase/answer/7030014?hl=ja)


BigQueryで、**前日のUniversal Links/App Links経由でモバイルアプリを起動したイベント回数を、プラットフォーム(iOS, Android)と参照元等の組み合わせで表示する**クエリは下記のようになりました。
ぜひみなさんのプロジェクトでも参考にしてください :bow: 

```sql
SELECT
  platform,
  (SELECT value.string_value FROM UNNEST(event_params) AS x WHERE x.key = "source") AS app_source,
  (SELECT value.string_value FROM UNNEST(event_params) AS x WHERE x.key = "medium") AS medium,
  (SELECT value.string_value FROM UNNEST(event_params) AS x WHERE x.key = "campaign") AS campaign,
  COUNT(DISTINCT user_pseudo_id) as users,
  COUNT(user_pseudo_id) as eventCount
FROM
  `{your_project}.analytics_{your_id}.events_*`,
WHERE
  PARSE_DATE("%Y%m%d", event_date) = DATE(DATETIME_ADD(CURRENT_DATETIME, INTERVAL -1 DAY))
AND
  _TABLE_SUFFIX = FORMAT_DATE("%Y%m%d", DATE(DATETIME_ADD(CURRENT_DATETIME, INTERVAL -1 DAY)))
AND
  event_name  = 'firebase_campaign'
GROUP BY 
  platform,app_source,medium,campaign
ORDER BY users desc
```


# 所感：独自のイベントを実装するのもアリかも？ :pencil: 
* 本記事はFirebase Analyticsをモバイルアプリに導入した際に、Universal Links/App Linksでアプリを起動したときの自動計測イベント `firebase_campaign`の分析方法について紹介しました
* firebase_campaignイベントはFirebaseコンソール画面からだと確認しづらい？かも？
* それならばいっそ独自のカスタムイベントとして、Universal Links/App Linksでアプリを起動したときにFirebase Analyticsの集計イベントを発火させるように実装したほうが、後々集計しやすいのではないかと思いました