Unity製のアプリにFirebaseとAdMobを導入した話

#概要
元々スキルアップと自己満足のために、モバイルアプリを個人開発したいと思っていたので、作ってリリースした。
その際にFirebase（正確にはFirebase Analytics）とAdMobを導入したので、流れを備忘録的に残しておく。

**なぜUnity？**
視覚的に作れて比較的実装が簡単、かつクロスプラットフォームに対応しているから。

**なぜAdMob？**
広告表示処理を実装したかったから。
Unity AdsでもよかったけどAdMobの方が収益性高いとどこかの記事で読んだから（個人開発レベルだとあんま関係ない…ｗ）

**なぜFirebase？**
ログ送信処理を実装したかったから。

#Androidアプリへの導入
連携の流れは、以下の画像の通り。
![qiita用.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635329/2b18a694-80b3-3a18-4b90-434f04682e6b.jpeg)

##Firebase
なんだかんだ[公式サイト](https://firebase.google.com/docs/unity/setup?hl=ja)に書いてある通りに導入すればいい。
ちょっとわかりにくいが、Firebaseコンソールの導入フローまで行くと懇切丁寧にサポートしてくれる。
Androidの場合は構成ファイルがjson形式でダウンロードされる。
SDK導入と構成ファイルの配置が終わったら、準備完了。

Firebase Analyticsのイベントには**自動で収集されるイベント**、**推奨イベント**、**カスタムイベント**の3つがあり、このうち後者2つはソース内で明示的にログ送信処理を記述する必要がある。
自動で収集されるイベントは[こちら](https://support.google.com/firebase/answer/6317485?hl=ja)、Firebase側で用意されている推奨イベントは[こちら](https://firebase.google.com/docs/reference/unity/class/firebase/analytics/firebase-analytics?hl=ja#eventaddpaymentinfo)。

例えば、推奨イベントの1つである`EventAppOpen`（アプリ起動時のログ送信）の場合、タイトル画面で呼び出されるスクリプトのStart()とかに以下の1行を記述すればいい。

```c#:TitleManager.cs
Firebase.Analytics.FirebaseAnalytics.LogEvent(Firebase.Analytics.FirebaseAnalytics.EventAppOpen);
```

自分で作成したカスタムイベントの場合は以下の通り。こちらはエラーが起きた際に送信されるイベントで、第一引数にイベント名、第二引数にパラメータ名、第三引数にパラメータ値をセットしている。

```c#:TitleManager.cs
Firebase.Analytics.FirebaseAnalytics.LogEvent("ADMOB_LOAD_ERROR", "message", args.Message);
```

ちなみにカスタムイベントのパラメータはFirebase Analytics側から確認できないことがある（Big Query連携が必要）。
その際も推奨イベントを利用することで、パラメータを確認することが可能になる。
参考 -> [実装事例紹介：Firebase Analyticsでカスタムイベントログ収集](https://blog.applibot.co.jp/2018/02/27/example-for-firebase-analytics-custom-event/)

##AdMob
こちらも基本的には[公式サイト](https://developers.google.com/admob/unity/start?hl=ja)に書いてある通りに導入。
予めAdMob側でアプリを登録して広告ユニットを作っておき、発行されたAppIDはUnityの設定画面に、adUnitIDはソースの呼び出したい箇所に記述する（テストの際はテスト用のadUnitIDを使うこと！破るとBANされる可能性あり！）。
筆者はインタースティシャル広告を導入したが、それも公式からソースコードをコピペするだけで動いた。
ただし本番用の広告はサーバや端末の状態でたまにロードに失敗することもあるらしい。
参考 -> [インタースティシャル広告](https://developers.google.com/admob/unity/interstitial?hl=ja)

#iOSアプリへの導入
連携の流れは、以下の画像の通り。
![qiita用.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635329/531d83e8-56e0-85c6-4a2a-dc117f325266.jpeg)

##Firebase
基本的にはAndroidと同じ。
iOSの場合は構成ファイルがplistでダウンロードされる。
Androidのjsonとの共存も可能。Unity側のプラットフォーム切り替えでよしなに判断してくれるらしい。
Firebaseプロジェクト作成時に、両方のプラットフォーム一括で登録もできるし、あとから片方だけ追加することも可能。

##AdMob
こちらも基本的にはAndroidと同じ。
プラットフォームが異なる場合は、別のアプリとして登録する必要がある（当然AppIDやadUnitIDも異なる）。

#結論
Google最強すぎる。
自分でサーバとか立てなくても、無料でログ送信や広告配信ができるのはすばらしすぎる。
画像にもある通り、FirebaseとAdMobをリンクさせることも可能で、リンクするとFirebase側から収益額などを確認できる。

ちなみに作ったゲームアプリはこちら。 
~~iOS版は執筆時点で、Appleから謎のアカウント審査があり、
`We are unable to continue this app’s review because your Apple Developer Program account is currently under investigation for not following the App Store Review Guidelines’ Developer Code of Conduct.`
のメッセージだけ送られて、3ヶ月間放置状態なのでAndroid版だけ。~~
（5/22　iOS版も無事公開されました！）

[とんずらぺーちゃん（iOS）](https://apps.apple.com/jp/app/%E3%81%A8%E3%82%93%E3%81%9A%E3%82%89%E3%83%9A%E3%83%BC%E3%81%A1%E3%82%83%E3%82%93/id1497409069?mt=8)

[とんずらぺーちゃん（Android）](https://play.google.com/store/apps/details?id=com.EgoTechCommunity.EscapingGoldfish)
![unnamed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635329/f6150684-d629-2c99-f69c-fdf5586a2c07.png)