[Unity]Firebaseを使ったプロジェクトの作り方(Analytics, Crashlytics)

# 概要
UnityでFirebaseを導入したプロジェクトを作成する手順です
（Android実機での動作確認までやります）
# 本文
## Unityプロジェクトを新規作成

とりあえずFirebaseTestという名前でプロジェクトを作ります
![スクリーンショット 2022-12-17 8.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/4aca906c-63cc-ac1f-bc12-35f67f5eebf6.png)

BuildSettingsを表示（メニューからFile > Build Settings）してPlatformにAndroidを選びSwitch Platformを押します。続いてPlayer Settingsボタンを押して
![スクリーンショット 2022-12-17 9.04.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/8856192c-59d8-5f83-fb92-976066459930.png)


Project Settings画面でAndroidのタブが選択されている事を確認して、PackageNameにパッケージネームが入力されている事を確認します何も入力されていない時は入力してください。


![スクリーンショット 2022-12-17 9.16.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/3e465398-42b0-4c1b-e52d-ea1e39b5bba1.png)

:::note info
パッケージネームは後ほどFirebaseのコンソール画面で必要になります。
(ちなみにiOS版の場合は同じような手順でBundle Identifierの方を使います)
:::

## Firebaseプロジェクトの作成(FirebaseConsole)
Webブラウザで[FirebaseConsole画面](https://console.firebase.google.com/?hl=ja)を開いてプロジェクトを作成
![スクリーンショット 2022-12-17 9.33.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/ccc753a7-8397-6147-9fa3-15e4d5b07ce8.png)
画面の指示に従って設定していきます。Googleアナリティクスはお好みで設定してください。今回の記事ではAnalyticsも確認しますのでONにしておきます。
![スクリーンショット 2022-12-17 9.34.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/dcbb987c-75ff-7824-a3a4-255726442503.png)

## プロジェクトの設定(FirebaseConsole)
ここまでの手順が終わったらこのような画面になりますので、Unityのマークを押します。
![スクリーンショット 2022-12-17 9.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/81d2c4b8-839d-172c-a709-24d09738d6a6.png)
1ページ目では先ほどUnity上で確認したPackageNameを入力します。

:::note info
ちなみにiOS版の場合はUnity上でBundle Identifierを確認しておいてAppleバンドル IDに入力します。
:::
![スクリーンショット 2022-12-17 15.26.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/8809851b-0c02-d80f-150f-7277991b4116.png)
２ページ目でFirebase構成ファイルをダウンロードします。
(Androidならgoogle-service.json。iOSならGoogleService-Info.plist)

:::note warn
Firebase構成ファイルの内容は**プロジェクトごとに違います**。他のプロジェクトで流用してしまうと正常に動作しなくなりますので注意してください。
:::
![スクリーンショット 2022-12-17 15.31.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/d365e901-380c-4aef-e086-1a3dece8b4f0.png)
3ページ目でFirebase Unity SDKをダウンロードします。
**（圧縮ファイルなので、忘れずに解凍しておきましょう）**

:::note warn
Firebase Unity SDKは**プロジェクトによって変わるものではありません**。バージョンに問題が無ければ他のプロジェクトに流用しても問題ありません。
:::
![スクリーンショット 2022-12-17 15.38.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/c97f4d42-ea67-aa59-9a77-d2c76ae37762.png)
## プロジェクトの設定(Firebase Unity SDK)
ここまで進んだらUnityへ戻ります。メニューからAssets > Import Package > Custom Packageを選びます。
ファイルの選択画面が表示されますので、使用したいFirebaseの機能に関連したファイルを選びます。（今回はまずFirebaseAnalytics.unitypackageをインポートして、その次にFirebaseCrashlytics.unitypackageをインポートしました）
![スクリーンショット 2022-12-17 15.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/2e8473d1-4257-d659-4fc9-a1f7ef8bc10f.png)
インポートの途中でこのようなポップアップが表示されたらEnableを押します。
![スクリーンショット 2022-12-17 15.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/54e51cc4-81e2-332b-c9cb-9595aec48a87.png)
## プロジェクトの設定(google-service.json)
ここまで進行するとAssetsフォルダ直下にFirebaseフォルダが出来ていると思います。この中に先ほどダウンロードしたgoogle-service.json（iOSの場合はGoogleService-Info.plist）をドラッグ&ドロップで入れてください。

:::note info
多くの方の情報ではこのFirebaseフォルダに入れないと正常に動かないと書かれていますが、2022年12月現在ではAssetsフォルダ直下に置いても正常に動作することが確認できました。
:::
![スクリーンショット 2022-12-17 15.57.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/e68eee24-6c80-b5c7-4932-8414c4122fd9.png)
## テスト実行
スクリプトを作成します

```cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FirebaseInitializer : MonoBehaviour
{
    [SerializeField] private Button btnSetCrash;
    
    public State SetupState { get; protected set; } = State.Init;
    public enum State {
        Init,
        Success,
        Fail
    }
    
    void Start()
    {
        btnSetCrash.onClick.AddListener(TestCrash);
        Initialize();
    }

    private void Initialize()
    {
        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.
                Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;

                // Set a flag here to indicate whether Firebase is ready to use by your app.
                SetupState = State.Success;
            } else {
                UnityEngine.Debug.LogError(System.String.Format(
                    "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                // Firebase Unity SDK is not safe to use here.
                SetupState = State.Fail;
            }
        });
    }
    
    private void TestCrash()
    {
        throw new System.Exception("(ignore) this is a test crash");
    }
}

```

ボタンを押したらクラッシュ用メソッドが実行されるように設定します。
![スクリーンショット 2022-12-17 16.45.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/88bb0a61-7fd9-0c80-bd4f-348e1b5295e3.png)
ビルドしてAndroid実機で動作させます。

:::note info
FirebaseCrashlyticsは発動したクラッシュが次回のアプリ起動時に通知されます。Crashlyticsのログを確認したいときは以下の手順を行なってください。
①アプリを起動してクラッシュさせる(Crashボタンを押す)
②アプリを終了して再起動する
:::
## 結果確認(FirebaseConsole)
再度WebブラウザでFirebaseConsole画面を開いて結果を確認します。

**[FirebaseAnalyticsの確認]**
左のサイドメニューから 分析 > Dashboard
![スクリーンショット 2022-12-17 16.14.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/dcd6a844-ab37-c8b3-0b20-6fea65027658.png)
**[FirebaseCrashlyticsの確認]**
左のサイドメニューから リリースとモニタリング > Crashlytics
![スクリーンショット 2022-12-17 16.55.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/defad8f7-5fe0-7a06-f153-eca915aaabb5.png)

情報を取得できていることが無事確認できました！:open_hands_tone1:

# (補足)プロジェクトからFirebaseをアンインストールしたい場合は

:::note warn
プロジェクトへの影響は大きいので、バージョン管理ツール等で操作を復元できる状態やテスト環境などで操作をしてください。
:::
メニューからAssets > External Dependency Manager > Version Handler > Uninstall Managed Packages
![スクリーンショット 2022-12-17 17.52.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/be5257fb-da73-5323-4264-425d416d5db0.png)
ポップアップが表示されます。消したい項目を選んでUninstall Selected Packagesを押します。
![スクリーンショット 2022-12-17 17.52.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/a9de3872-ed68-46b4-b791-a340d28ce1c0.png)