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

Unity
スポンサーリンク

今回はこれまでセッティングしたFirebaseを使って実際に計測していきます。
私自身のゲームアプリで利用した方法をベースにログの取り方を紹介していきたいと思いますのでログをどのように取るべきかお悩みの方などの参考になれば幸いです。

前回の記事

これまでの記事はこちらです。

[その1] プライバシーポリシー編

Firebaseを入れて分析してみよう! その1 プライバシーポリシー編
Unityでアプリを開発する上でFirebaseというものを組み込むことになったので こちら備忘録として残しておきたいと思います。 今回は第一章としてFirebaseAnalyticsの説明とプライバシーポリシーについてご紹介します。

[その2]インストール編

Firebaseを入れて分析してみよう!その2インストール編
前回Firebaseとプライバシーポリシーについてご紹介したので今回はダッシュボードへの登録とUnityへの組み込み方法をお伝えしたいと思います。

 

Unityにログ用クラスを用意する

まずアプリ側でログを取るタイミング(ゲームクリア、ゲームオーバーなど)に応じたイベント通知処理を呼び出す必要があります。

そこで今回は開発中のアプリで実際利用した処理を流用して説明をしていこうと思います。

ゲームアプリ「妖言」の概要

下記リンクで内容を知っておくとイメージしやすいかもしれません。

妖怪剣劇アクション 妖言 零之章
ゲーム概要 タイトル:妖怪剣劇アクション 妖言 ジャンル:2DアクションRPG プラットフォーム:Android ...

 

実際のプログラム

実際アプリで実行しているスクリプトはこんな感じです。
解説は一つずつしていきますので、ザラッとみる感じでオーケーです。

クラス名は「AnalyticsManager 」で計測系をまとめて行うクラスというイメージです。

using System.Collections.Generic;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Firebase.Analytics;

public class AnalyticsManager : MonoBehaviour
{
    // シングルトン処理
    private static AnalyticsManager instance;
    public static AnalyticsManager Instance
    {
        get{
            if (instance == null) {
                Type t = typeof(AnalyticsManager);

                instance = (AnalyticsManager)FindObjectOfType (t);
                if (instance == null) {
                    Debug.LogError (t + " をアタッチしているGameObjectはありません");
                }
            }
            return instance;
        }
    }

    // クエスト終了タイプ
    public enum QuestEndType
    {
        Clear,
        GameOver,
        MenuQuit,
        AppQuit,
    }

    // イベント:クエストクリアをシェアしたか
    const string EVENT_SHARE_QUEST_CLEAR = "share_quest_clear";

    // イベント:クエスト開始&終了
    const string EVENT_QUEST_START = "quest_start";
    const string EVENT_QUEST_END = "quest_end";

    // イベント:広告リワードを取得したか
    const string EVENT_AD_REWARD_GET    = "ad_reward_get";

    // イベント:広告リワードをキャンセルしたか
    const string EVENT_AD_REWARD_CANCEL = "ad_reward_cancel";

    // パラメータ:
    const string PARAM_QUEST_NAME = "name";
    const string PARAM_QUEST_END_TYPE = "end_type";
    const string PARAM_QUEST_ELAPSED_TIME_SEC = "elapsed_time_sec";


    // 正常に初期化できたか
    bool m_valid = false;
    bool IsValid{ get{ return m_valid; }}
    bool IsInvalid{ get{ return !m_valid; }}


    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);
    }


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

    // ログ:クエスト終了
    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),
        });
    }

    // ログ:クエストクリアをシェア
    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);
    }
}


 

コメント

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