public static void SendEvent(string eventID) { GA_Submit.CategoryType category = GA_Submit.CategoryType.GA_Event; List <GA_Submit.Item> queue = new List <GA_Submit.Item>(); Hashtable parameters = new Hashtable() { { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.EventID], eventID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Level], "Unity Editor" }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.UserID], _userID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.SessionID], _sessionID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Build], GA_Settings.VERSION } }; queue.Add(new GA_Submit.Item() { AddTime = 0, Count = 1, Type = category, Parameters = parameters }); Dictionary <GA_Submit.CategoryType, List <GA_Submit.Item> > dict = new Dictionary <GA_Submit.CategoryType, List <GA_Submit.Item> >(); dict.Add(category, queue); WWW www = GetEventWWW(category, parameters); GA_ContinuationManager.StartCoroutine(GA_Submit.SendWWW(www, Submitted, SubmitError, true, "", "", queue), () => www.isDone); }
/// <summary> /// Archives json data so it can be sent at a later time, when an internet connection is available. /// </summary> /// <param name='json'> /// The json data as a string /// </param> /// <param name='serviceType'> /// The category type /// </param> public void ArchiveData(string json, GA_Submit.CategoryType serviceType) { #if !UNITY_WEBPLAYER && !UNITY_NACL && !UNITY_FLASH && !UNITY_METRO StreamWriter fileWriter = null; string fileName = Application.persistentDataPath + "/" + FILE_NAME; if (File.Exists(fileName)) { if (new FileInfo(fileName).Length + System.Text.ASCIIEncoding.Unicode.GetByteCount(json) <= GA.SettingsGA.ArchiveMaxFileSize) { fileWriter = File.AppendText(fileName); } } else if (System.Text.ASCIIEncoding.Unicode.GetByteCount(json) <= GA.SettingsGA.ArchiveMaxFileSize) { fileWriter = File.CreateText(fileName); } if (fileWriter != null) { fileWriter.WriteLine(serviceType + " " + json); fileWriter.Close(); } #endif }
private static WWW GetEventWWW(GA_Submit.CategoryType category, Hashtable parameters) { string url = GA_Submit.GetURL(GA_Submit.Categories[category], _publicTestKey); string json = GA_Submit.DictToJson(new List <Hashtable>() { parameters }); string jsonHash = GA_Submit.CreateMD5Hash(json + _privateTestKey); return(GA_Submit.CreateSubmitWWW(url, json, jsonHash)); }
/// <summary> /// Add a new message to the submit queue. If we are in the middle of a queue submit we add the message to the temporary queue instead /// </summary> /// <param name="parameters"> /// The message is a dictionary of parameters <see cref="Dictionary<System.String, System.Object>"/> /// </param> /// <param name="type"> /// The GA service to send the message to (see GA_Submit) <see cref="GA_Submit.CategoryType"/> /// </param> /// <param name="stack"> /// If true any identical messages in the queue will be merged/stacked as a single message, to save server load /// </param> public static void AddItem(Hashtable parameters, GA_Submit.CategoryType type, bool stack) { //No reason to add any more items if we have stopped submitting data or we are not supposed to submit in the first place if (_endsubmit || (Application.isEditor && !GA.SettingsGA.RunInEditorPlayMode)) { return; } GA_Submit.Item item = new GA_Submit.Item { Type = type, Parameters = parameters, AddTime = Time.time }; #if !UNITY_EDITOR if (!_userEventSuccess && type != GA_Submit.CategoryType.GA_User) { _tempQueue.Add(item); return; } #endif if (_submittingData) { /*if (stack && type == GA_Submit.CategoryType.GA_Log) * { * StackQueue(_tempQueue, item); * } * else * {*/ _tempQueue.Add(item); //} } else { /*if (stack && type == GA_Submit.CategoryType.GA_Log) * { * StackQueue(_queue, item); * } * else * {*/ _queue.Add(item); //} } }
public static void SendUserEvent() { GA_Submit.CategoryType category = GA_Submit.CategoryType.GA_User; string os = ""; string[] osSplit = SystemInfo.operatingSystem.Split(' '); if (osSplit.Length > 0) { os = osSplit[0]; } #if UNITY_IPHONE bool idfa = CheckIDFA(); #endif List <GA_Submit.Item> queue = new List <GA_Submit.Item>(); Hashtable parameters = new Hashtable() { { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Platform], GA_GenericInfo.GetSystem() }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Device], SystemInfo.deviceModel }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Os], os }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.OsVersion], SystemInfo.operatingSystem }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Sdk], "GA Unity SDK " + GA_Settings.VERSION }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.InstallPublisher], "UnityVersion:" + UnityEditorInternal.InternalEditorUtility.GetFullUnityVersion() }, #if UNITY_IPHONE { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.InstallSite], "IDFA:" + idfa.ToString() }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.InstallCampaign], "iAD:" + EditorPrefs.GetBool("GA_IAD" + "-" + Application.dataPath, GA_Settings.IAD_DEFAULT) }, #endif #if UNITY_IPHONE || UNITY_ANDROID { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.InstallAdgroup], "Chartboost:" + EditorPrefs.GetBool("GA_CB" + "-" + Application.dataPath, GA_Settings.CB_DEFAULT) }, #endif { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.UserID], _userID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.SessionID], _sessionID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Build], GA_Settings.VERSION } }; queue.Add(new GA_Submit.Item() { AddTime = 0, Count = 1, Type = category, Parameters = parameters }); Dictionary <GA_Submit.CategoryType, List <GA_Submit.Item> > dict = new Dictionary <GA_Submit.CategoryType, List <GA_Submit.Item> >(); dict.Add(category, queue); WWW www = GetEventWWW(category, parameters); GA_ContinuationManager.StartCoroutine(GA_Submit.SendWWW(www, Submitted, SubmitError, true, "", "", queue), () => www.isDone); }
/// <summary> /// Add a new message to the submit queue. If we are in the middle of a queue submit we add the message to the temporary queue instead /// </summary> /// <param name="parameters"> /// The message is a dictionary of parameters <see cref="Dictionary<System.String, System.Object>"/> /// </param> /// <param name="type"> /// The GA service to send the message to (see GA_Submit) <see cref="GA_Submit.CategoryType"/> /// </param> /// <param name="stack"> /// If true any identical messages in the queue will be merged/stacked as a single message, to save server load /// </param> public static void AddItem(Hashtable parameters, GA_Submit.CategoryType type, bool stack) { //No reason to add any more items if we have stopped submitting data or we are not supposed to submit in the first place if (_endsubmit || (Application.isEditor && !GA.SettingsGA.RunInEditorPlayMode)) { return; } GA_Submit.Item item = new GA_Submit.Item { Type = type, Parameters = parameters, AddTime = Time.time }; if (_submittingData) { if (stack && type == GA_Submit.CategoryType.GA_Log) { StackQueue(_tempQueue, item); } else { _tempQueue.Add(item); } } else { if (stack && type == GA_Submit.CategoryType.GA_Log) { StackQueue(_queue, item); } else { _queue.Add(item); } } }
/// <summary> /// Gets data which has previously been archived due to lack of internet connectivity. /// The file containing the archived data is then deleted. /// </summary> /// <returns> /// The archived data as a list of items with parameters and category /// </returns> public List <GA_Submit.Item> GetArchivedData() { #if UNITY_WEBPLAYER || UNITY_NACL || UNITY_FLASH || UNITY_METRO return(null); #else List <GA_Submit.Item> items = new List <GA_Submit.Item>(); StreamReader fileReader = null; string fileName = Application.persistentDataPath + "/" + FILE_NAME; if (File.Exists(fileName)) { fileReader = File.OpenText(fileName); } if (fileReader != null) { string line = null; while ((line = fileReader.ReadLine()) != null) { string[] lineSplit = line.Split(' '); if (lineSplit.Length >= 2) { string categoryString = lineSplit[0]; string json = line.Substring(lineSplit[0].Length + 1); bool saveData = false; GA_Submit.CategoryType category = GA_Submit.CategoryType.GA_User; foreach (KeyValuePair <GA_Submit.CategoryType, string> kvp in GA_Submit.Categories) { if (kvp.Key.ToString().Equals(categoryString)) { category = kvp.Key; saveData = true; } } if (saveData) { ArrayList itemsParameters = (ArrayList)GA_MiniJSON.JsonDecode(json); //JsonMapper.ToObject<List<Dictionary<string, object>>>(json); foreach (Hashtable parameters in itemsParameters) { GA_Submit.Item item = new GA_Submit.Item { Type = category, Parameters = parameters, AddTime = Time.time }; items.Add(item); } } } } fileReader.Close(); File.Delete(fileName); } return(items); #endif }
public static void EventSuccess(List <GA_Submit.Item> items) { List <GA_Submit.Item> queue = new List <GA_Submit.Item>(); Hashtable parameters = new Hashtable() { { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.EventID], "DataSent" }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Level], "Unity Editor" }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.UserID], _userID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.SessionID], _sessionID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Build], GA_Settings.VERSION } }; queue.Add(new GA_Submit.Item() { AddTime = 0, Count = 1, Type = GA_Submit.CategoryType.GA_Event, Parameters = parameters }); bool xyzData = false; foreach (GA_Submit.Item item in items) { if (!xyzData && (item.Parameters.ContainsKey("x") || item.Parameters.ContainsKey("y") || item.Parameters.ContainsKey("z"))) { xyzData = true; } GA_Submit.CategoryType categoryType = item.Type; if (categoryType == GA_Submit.CategoryType.GA_Event || categoryType == GA_Submit.CategoryType.GA_Purchase || categoryType == GA_Submit.CategoryType.GA_Error) { Hashtable parametersCat = new Hashtable() { { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.EventID], "DataSent:Type:" + GA_Submit.Categories[categoryType] }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Level], "Unity Editor" }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.UserID], _userID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.SessionID], _sessionID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Build], GA_Settings.VERSION } }; queue.Add(new GA_Submit.Item() { AddTime = 0, Count = 1, Type = GA_Submit.CategoryType.GA_Event, Parameters = parametersCat }); } } if (xyzData) { Hashtable parametersXYZ = new Hashtable() { { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.EventID], "DataSent:Heatmap" }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Level], "Unity Editor" }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.UserID], _userID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.SessionID], _sessionID }, { GA_ServerFieldTypes.Fields[GA_ServerFieldTypes.FieldType.Build], GA_Settings.VERSION } }; queue.Add(new GA_Submit.Item() { AddTime = 0, Count = 1, Type = GA_Submit.CategoryType.GA_Event, Parameters = parametersXYZ }); } Dictionary <GA_Submit.CategoryType, List <GA_Submit.Item> > dict = new Dictionary <GA_Submit.CategoryType, List <GA_Submit.Item> >(); dict.Add(GA_Submit.CategoryType.GA_Event, queue); GA.API.Submit.SubmitQueue(queue, Submitted, SubmitError, true, _publicTestKey, _privateTestKey); }