概要
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
ダウンロード
特徴
必要なのはcsの1ファイルのみでMonoBehaviourクラスを継承したクラスを使うのでpublicになった設定が操作しやすくかなりシンプル。ただ機能として表示画面のトラッキングのみなのがデメリット。
使い方
まずシーンにGameObjectをEmptyで作成。その際にGoogleAnalyticsManagerなどと名前をつける。そのGoogleAnalyticsManagerにGoogleAnalyticsクラスをaddする。
他のクラスなどからGoogleANalyticsクラスを下記のように呼び出し表示された画面名を渡す
if (GoogleAnalytics.instance) {
GoogleAnalytics.instance.LogScreen("Main Menu");
}
仕組み
WWWクラスを使ってGoogleAnalyticsのサーバーにGETでリクエストを送っているだけの様子。
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からドラッグアンドドロップして利用する。
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でエラーになったり、なったから対処するということは殆ど無いと思う)。