UnityでGoogleAnalyticsを使う


# 概要

UnityでGoogleAnalyticsを使う場合どうすればいいのか調べたのでメモ。

基本的には公式のSDKなどがなくHTTPのGETやPOSTで必要なパラメータを送るMeasurement Protocolをつかっている。

Measurement Protocol
https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide?hl=ja

おそらくiOSとAndroidのGoogle Analytics SDKを使った時のように、アプリがしっかりと区別出来るわけではないという気がする。

調べたのは2つ

- GoogleAnalyticsPlugin
- unity3d-google-analytics

結論から言うとGoogleAnalyticsPluginはとてもシンプルだがイベントの設定ができないのでunity3d-google-analyticsが良いだろう。

注意点として、SystemInfo.deviceUniqueIdentifierを使ってパラメータcidの値をGoogleAnalyticsに送らなければならないコードになっていて、このSystemInfo.deviceUniqueIdentifierはAndroidでREAD_PHONE_STATEパーミッションを要求しUnityがAndoridManifest.xmlに自動で追記します。このパーミッションによってユーザーが躊躇してしまうのはもったいないので、Androidの場合は実装しないのも手かもしれません。

# GoogleAnalyticsPlugin

## ダウンロード

http://massthreat.com/labs/googleanalytics

## 特徴

必要なのはcsの1ファイルのみでMonoBehaviourクラスを継承したクラスを使うのでpublicになった設定が操作しやすくかなりシンプル。ただ機能として表示画面のトラッキングのみなのがデメリット。



## 使い方

まずシーンにGameObjectをEmptyで作成。その際にGoogleAnalyticsManagerなどと名前をつける。そのGoogleAnalyticsManagerにGoogleAnalyticsクラスをaddする。

他のクラスなどからGoogleANalyticsクラスを下記のように呼び出し表示された画面名を渡す

```
if (GoogleAnalytics.instance) {
    GoogleAnalytics.instance.LogScreen("Main Menu");
}
```


## 仕組み

WWWクラスを使ってGoogleAnalyticsのサーバーにGETでリクエストを送っているだけの様子。

```csharp
	public void LogScreen(string title)
	{
		
		title = WWW.EscapeURL(title);
		
		var url = "http://www.google-analytics.com/collect?v=1&ul=en-us&t=appview&sr="+screenRes+"&an="+WWW.EscapeURL(appName)+"&a=448166238&tid="+propertyID+"&aid="+bundleID+"&cid="+WWW.EscapeURL(clientID)+"&_u=.sB&av="+appVersion+"&_v=ma1b3&cd="+title+"&qt=2500&z=185";
		
		WWW request = new WWW(url);
		
		/*if(request.error == null)
		{
			if (request.responseHeaders.ContainsKey("STATUS"))
			{
				if (request.responseHeaders["STATUS"] == "HTTP/1.1 200 OK")	
				{
					Debug.Log ("GA Success");
				}else{
					Debug.LogWarning(request.responseHeaders["STATUS"]);	
				}
			}else{
				Debug.LogWarning("Event failed to send to Google");	
			}
		}else{
			Debug.LogWarning(request.error.ToString());	
		}*/
		
	}
```

# unity3d-google-analytics

## ダウンロード

GitHub
https://github.com/Extrawurst/unity3d-google-analytics


## 特徴

こちらのほうがイベントも設定できる分良いかもしれない。


## 使い方

まずシーンにGameObjectをEmptyで作成。その際にGoogleAnalyticsManagerなどと名前をつける。そのGoogleAnalyticsManagerにCGoogleAnalyticsクラスをaddする。

下記のようなSampleクラスのpublicなメンバにCGoogleAnalyticsをIDEからドラッグアンドドロップして利用する。

```csharp
public class Sample : MonoBehaviour
{
    // setup this component correctly befor. you will need a google analytics profileId for this
    public CGoogleAnalytics ga;

    // Use this for initialization
    void Start ()
    {
        // session starts
        ga.analytics.TrackSession(true);

        // tracking screens
        ga.analytics.TrackAppview("SampleScreen");

        // track some event
        ga.analytics.TrackEvent("eventCategory","eventLabel","eventAction",1234);

        // session ends
       ga.analytics.TrackSession(false);
    }

}
```

しかしこのサンプルのようにSessionをonしてすぐoffしてしまうと利用時間が短すぎると思うんだけどどうなんだろう...

## 仕組み

これもWWWクラスを使っているが、WWWFormも使っていてPOSTをしているのが分かる。コルーチンでその結果を取得してデバッグログを出力しているがほとんど意味が無いのでこれは消したほうがいいだろう（基本的にリリースするアプリで必要ないし、開発時もGoogleAnalyticsでエラーになったり、なったから対処するということは殆ど無いと思う）。