PR

【Unity】Firebaseを入れて分析してみよう!その3 実践編

Unity

プログラムを解説

初期化(Awake時)

    void Awake()
    {
        // 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.
                    //   app = Firebase.FirebaseApp.DefaultInstance;
 
                    // Set a flag here to indicate whether Firebase is ready to use by your app.
                    m_valid = true;
                    FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventAppOpen);
                }
                else
                {
                    UnityEngine.Debug.LogError(System.String.Format(
                        "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                    // Firebase Unity SDK is not safe to use here.
                }
            }
        );

        DontDestroyOnLoad(gameObject);
    }

最初に呼ばれている「Firebase.FirebaseApp.CheckAndFixDependenciesAsync」はFirebase側で指定されている初期化処理です。

これをリクエストしてすこし待ったら下記の条件処理のところに来るのでそこで初期化完了です。

if (dependencyStatus == Firebase.DependencyStatus.Available) {

逆にここにくるまでは初期化が完了していないため、安全のためにログ系の処理は実行は「m_valid」や「IsValid」を用いて除外するようにしています。

※このクラスでは実行中に通信回線の切断やその復帰などは考慮していません。必要な場合は別途実装が必要です。

 

DontDestroyOnLoad(gameObject);

これはこのスクリプトを付いているゲームオブジェクトをシーンから削除しないようにする処理です。なのでこのクラスは最初に呼ばれるシーンのみに配置することになります。

 

ログ:クエスト開始

    // ログ:クエスト開始
    public void LogStartQuest( string questName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_QUEST_START, PARAM_QUEST_NAME, questName );
    }

クエスト開始時に呼び出します。
「IsInvalid」で中止しているので未初期化時には呼び出されないようになっています。

イベント名やパラメータ名、また引数の「questName」は「FirebaseAnalytics.LogEvent」の引数に渡されています。引数はこのようになっています。

第1引数・・・イベント名
第2引数・・・パラメータ名
第3引数・・・実際のパラメータ値

シングルトンで呼び出せるので他のスクリプトからの呼び出し時は下記のようになります。

AnalyticsManager.Instance.LogStartQuest(“Tutorial”);

便利ですね。

 

ログ:クエスト終了

// ログ:クエスト終了
    public void LogEndQuest( string questName, QuestEndType endType, int elapsedTimeInSec )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_QUEST_END, new Parameter[] {
            new Parameter( PARAM_QUEST_NAME, questName),
            new Parameter( PARAM_QUEST_END_TYPE, endType.ToString() ),
            new Parameter( PARAM_QUEST_ELAPSED_TIME_SEC, elapsedTimeInSec),
        });
    }

クエスト開始とほとんど一緒ですが
ひとつ違うのが「FirebaseAnalytics.LogEvent」の引数の渡し方です。

クエストが終わった時に計測したい内容は「クエスト名」、「クエストの終了タイプ」、「クエストプレイ時間」の3つです。

一つの場合はクエスト開始と同じ呼び出し方法で良いのですが、複数になると別の方法にする必要があります。

方法としては「Parameter」の配列を用意して、その配列に3つ入れ込む形です。
各「Parameter」は第1引数にパラメータ名、第2引数にパラメータ値になります。

        FirebaseAnalytics.LogEvent( EVENT_QUEST_END, new Parameter[] {
            new Parameter( PARAM_QUEST_NAME, questName),
            new Parameter( PARAM_QUEST_END_TYPE, endType.ToString() ),
            new Parameter( PARAM_QUEST_ELAPSED_TIME_SEC, elapsedTimeInSec),
        });

ちなみに「endType」はそのままenum数値で送ってしまうと「0,1,2,3…」と数値で記録されてしまうので「endType.ToString」で文字列にしてからわかりやすい形でログを送っています。

 

ログ:クエストクリアをシェア

    // ログ:クエストクリアをシェア
    public void LogShareQuestClear()
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_SHARE_QUEST_CLEAR );
    }

クエストクリアしたときにシェアしたタイミングで呼び出すものです。
これでユーザーがシェアしたいゲームか否かある程度把握できます。

 

ログ:広告報酬ゲット

// ログ:広告報酬ゲット
    public void LogAdRewardGet()
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_AD_REWARD_GET );
    }

これは非常に重要な情報で広告を見たということは収益に影響するものです。
これはログ取るしかない…!

 

ログ:広告キャンセル

// ログ:広告キャンセル
    public void LogAdRewardCancel()
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_AD_REWARD_CANCEL );
    }

ログを見なかった人のログです。
広告みると復活できたりするので報酬が魅力的だと感じられていない場合に便利かなと追加しました。

 

ログ:シーン開始

// ログ:シーン開始
    public void LogStartScene( string sceneName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( FirebaseAnalytics.EventLevelStart, FirebaseAnalytics.ParameterLevelName, sceneName );
    }

該当シーンに移動した時にログを取ります。
どのシーンが一番利用されているか知ることができます。

 

ログ:シーン終了

// ログ:シーン終了
    public void LogEndScene( string sceneName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( FirebaseAnalytics.EventLevelEnd, FirebaseAnalytics.ParameterLevelName, sceneName );
    }

シーンが終わった時にログを取ります。
入れた後に気づきましたが滞在時間も取っていないしので正直あまり意味がありませんね…

 

ログ:スクリーン設定

// ログ:スクリーン設定
    public void SetScreeen( string screenName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.SetCurrentScreen( screenName,  null);
    }

実はこれどう使おうか悩んで使ってません。
スクリーンというのはアプリで言えばどのページに最も滞在したかなど
その辺りの情報が取れるみたいですね。

自分の場合、シーンの開始と終了あたりに入れといた方が都合良かったかもと思いつつ、同じシーンでもUIのページのどこで滞在していたなど詳細は異なるので、今回は利用を見送りました。

 

コメント

スポンサーリンク
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました