Firebase Crashlytics SDK にアップグレードする

新しい公式 Firebase Crashlytics SDK を使用して、アプリで Crashlytics を設定できるようになりました。新しい Firebase Crashlytics SDK では API が改善され、他の Firebase プロダクトとの整合性が高まり、より直感的に使用できます。

このガイドでは、従来の Fabric SDK から新しい SDK にアップグレードする方法について説明します。必要に応じて、新しい API における変更点、変更理由、コードを更新する方法についても説明します。

始める前に

Fabric はシーンに GameObject を追加して、ゲーム内の Crashlytics や SDK 自体の追加ディレクトリを初期化します。

Fabric Crashlytics プラグインと Firebase Crashlytics プラグインの競合を回避するには、Unity プロジェクトから次の Fabric フォルダとファイルを削除します。

  • [Assets] に含まれている次のファイルを削除します。

    Assets/
       Editor Default Resources/
           FabricSettings.asset     <- DELETE
       Fabric/                      ><- DELETE
       Plugins/
           Android/
               answers/             ><- DELETE
               beta/                ><- DELETE
               crashlytics/         ><- DELETE
               crashlytics-wrapper/ ><- DELETE
               fabric/              ><- DELETE
               fabric-init/         ><- DELETE
           iOS/
               Fabric/              ><- DELETE
    >
  • [Hierarchy Window] で、次の GameObject を削除します。

    SampleScene
        Main Camera
        Directional Light
        Canvas
        EventSystem
        FabricInit                  <- DELETE CrashlyticsInit><- DELETE
    >
  • [Assets] > [Plugins] > [Android] > [AndroidManifest.xml] で Fabric に関するすべてのエントリを削除します。

    たとえば、android:name="io.fabric.unity.android.FabricApplication" のような既存のキーを削除します。

    他の Fabric エントリが存在する場合は検索して削除します。

ステップ 1: Firebase 構成ファイルを追加する

  1. [プロジェクトの設定] を開きます。[マイアプリ] カードで、構成ファイルが必要なアプリのバンドル ID またはパッケージ名を選択します。

  2. アプリごとにプラットフォーム固有の Firebase 構成ファイルをダウンロードします。

    • iOS+ の場合 - GoogleService-Info.plist
    • Android の場合 - google-services.json

    構成ファイルは 1 つの Unity プロジェクトにつき最大 2 つまで設定できます。

  3. Unity プロジェクトで [Project] ウィンドウを開き、構成ファイルを Assets フォルダに移動します。

ステップ 2: Firebase Crashlytics SDK を追加する

  1. Firebase Unity SDK をダウンロードし、適切な場所で解凍します。

    Firebase Unity SDK はプラットフォーム固有ではありません。

  2. 開いている Unity プロジェクトで、[Assets] > [Import Package] > [Custom Package] を選択します。

  3. 解凍した SDK から Crashlytics SDK(FirebaseCrashlytics.unitypackage)を選択してインポートします。FirebaseCrashlytics.unitypackage バージョン 6.15.0 以降を使用していることを確認します(そうでない場合は、アセット パッケージのバージョンを更新します)。これは、Firebase コンソールにクラッシュ レポートを表示するために必要です。

    • Unity 2017.x 以降: .NET 4.x フレームワークを使用できます。Unity プロジェクトで .NET 4.x を使用している場合は、dotnet4/FirebaseCrashlytics.unitypackage をインポートします。

    その他のサポートされている Firebase プロダクトもインポートできます。

  4. [Import Unity Package] ウィンドウで [Import] をクリックします。

  5. 新しい C# スクリプトを作成して、シーン内の GameObject に追加します。

    1. 最初のシーンを開き、空の GameObject を作成します(CrashlyticsInitializer という名前を付けます)。

    2. 新しいオブジェクトに対して、[Inspector] で [Add Component] をクリックします。

    3. CrashlyticsInit スクリプトを選択して、CrashlyticsInitializer オブジェクトに追加します。

  6. スクリプトの Start メソッドで Crashlytics を初期化します。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // Import Firebase
    using Firebase;
    
    public class CrashlyticsInit : MonoBehaviour {
      // Use this for initialization
      void Start () {
          // Initialize Firebase
          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.
                  // Crashlytics will use the DefaultInstance, as well;
                  // this ensures that Crashlytics is initialized.
                  Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
    
                  // Set a flag here for indicating that your project is ready to use Firebase.
              }
              else
              {
                  UnityEngine.Debug.LogError(System.String.Format(
                    "Could not resolve all Firebase dependencies: {0}",dependencyStatus));
                  // Firebase Unity SDK is not safe to use here.
              }
          });
      }
    
    // Update is called once per frame
    void Update()
      // ...
    }

SDK を追加して初期化したので、Crashlytics は自動的にクラッシュ レポートをリッスンして収集します。

ステップ 3: コードを更新する

次の SDK の変更点を確認して、コードを適切に更新します。

Crashlytics は Firebase インストール ID に基づいて ID をローテーションするようになりました

Crashlytics は、Crashlytics のインストール UUID を使用してアプリのインスタンスを識別し、ユーザーのデータをデバイスに関連付けます。以前の Crashlytics では、デバイスの広告 ID が変更されたときにユーザーのインストール UUID をローテーションしていました。現在の Crashlytics では、ユーザーの Firebase インストール ID(FID)に基づいてインストール UUID をローテーションするようになっています。詳しくは、Firebase インストール ID の管理をご覧ください。

変更理由

他の Firebase SDK との整合性を取るため、FID を使用するようにしました。

Fabric.Crashlytics から Firebase.Crashlytics へ

名前空間を Fabric から Firebase に変更しました。

Fabric

using Fabric.Crashlytics;

Firebase

using Firebase.Crashlytics;

RecordCustomException から LogException へ

キャッチされて処理された致命的でないカスタムの例外をロギングします。

Fabric

Crashlytics.RecordCustomException(string name, string reason, StackTrace stackTrace);
Crashlytics.RecordCustomException(string name, string reason, string stackTraceString);

Firebase

Crashlytics.LogException(Exception ex);

変更理由

この関数は通常、Exception のインスタンスをロギングするために使用されます。「name」、「reason」、「stackTrace」を手動で抽出する代わりに(これらを抽出すると不要なコードが生成される)、Exception のインスタンスを提供できるようになり、Firebase Crashlytics によって必要な情報が抽出されます。

回避策

例外から直接情報を抽出する以外にこれらのパラメータを利用していた場合、以前の動作を維持するには、引き続き独自の Exception サブクラスを作成して、その説明にカスタムのメタデータを含めます。

SetKeyValue から SetCustomKey へ

クラッシュ レポートとともに送信する Key-Value ペアを設定します。同じキーを設定し直すと、値が更新されます。

Fabric

Crashlytics.SetKeyValue(string key, string value);

Firebase

Crashlytics.SetCustomKey(string key, string value);

変更理由

このメソッドの名前の変更は、動作をわかりやすくし、他の Firebase API との一貫性を高めるために行いました。

SetUserIdentifier から SetUserId へ

クラッシュが発生したユーザーを特定するのに役立つユーザー ID を設定します。

Fabric

Crashlytics.SetUserIdentifier(string identifier);

Firebase

Crashlytics.SetUserId(string identifier);

変更理由

このメソッドの名前の変更は、他の Firebase API との一貫性を高めるために行いました。しかも短くなったので、入力の手間も減りました。

SetUserEmail と SetUserName を削除

以前は明示的な方法で、クラッシュに関する名前やメールを設定することができましたが、今後は明示的な定義ができなくなります。

Fabric

Crashlytics.SetUserEmail(string email);
Crashlytics.SetUserName(string name);

変更理由

Google は顧客データの保護に努めており、その取り組みの一環として顧客データを保護するデベロッパー ツール向けの API を開発しています。これらのユーザー固有の API を削除したのは、クラッシュの影響を受けたユーザーを識別する際に、生成済みの個人を特定しないメソッドの使用を促すことを目的としています。

回避策

クラッシュが発生したユーザーを指定するには、SetUserId の使用をおすすめします。この方法で解決できない場合は、SetCustomKey を使用して同じ機能を実現できます。

Crash と ThrowNonFatal を削除

以前、Crashlytics にはテストのために例外をスローする 2 つのユーティリティ メソッドが用意されていましたが、Firebase Crashlytics にはこれらのメソッドが含まれません。

Fabric

Crashlytics.Crash();
Crashlytics.ThrowNonFatal();

変更理由

Crashlytics for Unity はさまざまな環境で動作し、多様なクラッシュが発生する可能性があります。これらのメソッドは、発生したクラッシュが C# で発生したのか、基盤となるプラットフォーム固有のネイティブ SDK で発生したのかを明示しませんでした。

回避策

  • Firebase コンソールの Crashlytics ダッシュボードにクラッシュ レポートを送信するテスト クラッシュを強制的に発生させることで、実装をテストします。

ステップ 4: プロジェクトをビルドする

  1. Unity の [Build Settings] ダイアログを使用してプロジェクトをエクスポートします。

  2. エクスポートが完了したら、エクスポートしたプロジェクトと以下のエクスポート構成の例を比較して、プロジェクトが正しくエクスポートされていることを確認します。

    iOS+

    Android

  3. プロジェクトを比較した結果、欠落しているファイルがある場合は、Unity エディタを開いて、Google Play 開発者サービス リゾルバを実行します(以下の手順を参照してください)。

エクスポート後にファイルが欠落している場合はリゾルバを実行する(必要に応じて)

External Dependency Manager for Unity(EDM4U)を使用すると、Unity プロジェクトに Apple プラットフォームと Android プラットフォーム用の適切なランタイム依存関係を格納できます。リゾルバの詳細については、Unity Jar Resolver の README をご覧ください。

次のステップ