公式サイトにヘルプはあります。
使用したUnity: 2018.3.1f1
入れたい対象は、iOSとAndroidですが、ビルド対象をAndroidにして進めます。
現状すでにAdMobを入れているプロジェクトで、Androidモジュールの自動的な更新が多めに動く感じなので、こちらがいいかなと。
Firebase用の設定ファイルをダウンロード
Firebaseのアナリティクスを、結構いろんなアプリに入れてますが、AdMobのWebページから、Firebase側に自動追加のように追加しているため、Firebase側で登録したことがありません。
この『アプリの設定』から、Firebaseへのリンクができます。
Firebase上のひとつの既存アカウントへ、どんどん追加していくような感じですね。
リンクする時に設定ファイルのダウンロードもできた記憶ですが、この『アプリの設定』にあるファイルボタンから、Firebaseのアプリページに遷移し、ダウンロードできます。
Firebaseのページから到達する場合は、Firebaseの自分のアカウントページ、Project Overviewを開き、「◯個のアプリ」のところをクリック。
表示される一覧から、今回入れたいアプリを探して、歯車マーク、または設定途中に表示される赤いマークのボタンをクリック。
iOSとAndroidでファイル名が異なります。
iOS用アプリの設定ファイル
GoogleService-Info.plist
Android用アプリの設定ファイル
google-services.json
FirebaseSDKをダウンロードし、dotnet4/FirebaseAnalytics.unitypackageを、ダブルクリックから、全部インポート。
Firebase Unity SDK
https://firebase.google.com/download/unity
設定ファイルをUnityプロジェクトのアセットフォルダーの直下へとりあえず配置してましたが、うまく動作せず。
場所はどこでも良いと書いてはありましたが、どこでもよくはないようです。
firebaseのunitypackageを取り込んだ後で、Firebaseフォルダーに配置しました。
Player Settings->Other Settingsは、dotnet4フォルダーのものを入れたので、.NET 4.xに。
最近は64bitビルドが必須となるので、Scripting BackendをIL2CPP、ARM64にチェックを。
これでファイル周りの導入は終了です。
Firebase初期化コード
最初のシーンで、DontDestroyOnLoadとしているオブジェクトのAwakeに入れました。
この初期化コードは、公式ヘルプのステップ6にあります。
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == Firebase.DependencyStatus.Available) { // Create and hold a reference to your FirebaseApp, // where app is a Firebase.FirebaseApp property of your application class. // app = Firebase.FirebaseApp.DefaultInstance; // Set a flag here to indicate whether Firebase is ready to use by your app. } else { UnityEngine.Debug.LogError(System.String.Format( "Could not resolve all Firebase dependencies: {0}", dependencyStatus)); // Firebase Unity SDK is not safe to use here. } });
この初期化だけで、Android側はsession_startのイベントが送信されるようです。
しかしなぜかiOS側はピコーンとなりません。
よくわからないので、EventAppOpenを両方のOSで送っておくと、いいんだと思います。
上記初期化内の、初期化完了地点で、送っておきます。
// Set a flag here to indicate whether Firebase is ready to use by your app. Firebase.Analytics.FirebaseAnalytics.LogEvent(Firebase.Analytics.FirebaseAnalytics.EventAppOpen);
EventAppOpenを入れると、iOS側で両方来ました。Android側も同じになってるはず。
iOSビルドは、Podsがくっついてくるので、xcodeprojではなく、xcworkspaceのファイルを開いてビルドします。
Unity-iPhone.xcworkspace
ただそのままビルドすると、nanopb clang: error: -fobjc-weak 云々なエラーが出ましたが、Xcode内で推奨される設定(Recommend Settings)を言われるがままオンにしてビルドすると、すんなりビルドできます。
あと注意点は、AdMobのことになるけれど、アプリIDの設定がiOS/Android双方に必要ですね。
[AdMob][iOS] GADApplicationIdentifier を追加しないとクラッシュ
[AdMob][Android] The Google Mobile Ads SDK was initialized incorrectly
ここは本記事内容とは違うところですが。
イベントの送信
上の方ですでに送ってましたが。
Analyticsのイベント送信は、こちらに記載があります。
Unity 用 Firebase 向け Google アナリティクスを使ってみる
https://firebase.google.com/docs/analytics/unity/start?hl=ja
Firebase.Analytics.FirebaseAnalytics.LogEvent(対象とするイベント);
イベントの記録も簡単です。
クラスのリファレンス
Firebase.Analytics.FirebaseAnalytics
https://firebase.google.com/docs/reference/unity/class/firebase/analytics/firebase-analytics
自分でつけた名称と値を送信する場合、予約された利用できない名前もありますね。
Firebase.Analytics.Parameter
https://firebase.google.com/docs/reference/unity/class/firebase/analytics/parameter
The "firebase_", "google_" and "ga_" prefixes are reserved and should not be used.
ヘルプページに記載があるように、AdMobのUnityパッケージは独立しているため、そもそも競合は起きない作りになっているんだと思います。
すでにAdMobを入れているプロジェクトへ、まぁまぁスムーズに導入できました。
と、Playストアに上げたところ、ひとつの警告が。
Android App Bundleという機能を有効化すると、ターゲットデバイス毎のバイナリ配布をしてくれるようです。
Unity 2018.3 ベータ版での Android App Bundle(AAB)サポート
https://blogs.unity3d.com/jp/2018/10/03/support-for-android-app-bundle-aab-in-unity-2018-3-beta/
Androidビルド時、Build App Bundle(Google Play)チェックを入れるだけでした。
このビルドは時間がかかるので、リリース用の時だけにすべきと上記blogに記載がありますね。
この機能は現在、Google Play専用のようです。
拡張子がapkではなくaabが生成されます。
このaabファイルをDeveloper Consoleへアップロードします。
iOSは、UIApplicationExitsOnSuspend(リスト表示はApplication does not run in background)に警告が出るようになったのでinfo.plistから削除。値をYESにしているアプリはそうそう無いと思います。YESの場合、ホーム画面に戻った時にアプリが終了されますので。