Exemple #1
0
    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
    }
Exemple #3
0
    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));
    }
Exemple #4
0
    /// <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);
            //}
        }
    }
Exemple #5
0
    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);
    }
Exemple #6
0
    /// <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
    }
Exemple #8
0
    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);
    }