using System.Collections.Generic; using System.Net.NetworkInformation; using System.Net.Sockets; using UnityEngine; public class DataEyeGA { public enum PlatformType { IOS = 1, ADR = 2, WP = 3 } public enum AccountType { _Anonymous = 0, _Registered = 1, _SinaWeibo = 2, _QQ = 3, _QQWeibo = 4, _ND91 = 5, _GooglePlay = 6, _Facebook = 7, Type3 = 8, Type4 = 9, Type5 = 10, Type6 = 11, Type7 = 12, Type8 = 13, Type9 = 14, Type10 = 15, } public enum Gender { _UNKNOWN = 0, _MALE = 1, _FEMALE = 2 } public enum NetType { _3G = 1, WIFI = 2, OTHER = 3, _2G = 4, _4G = 14 } public enum TaskType { GuideLine = 1, MainLine = 2, BranchLine = 3, Daily = 4, Activity = 5, Other = 6, } public enum RequestType { ActOrReg, Online, Pay, VirtualCurrency, BuyItem, UseItem, GetItem, Task, LevelUp, CustomEvent, } public static bool isInited = false; public static bool isAccountSet = false; private static Dictionary requestDict; private static string urlPrefix = "http://ext.gdatacube.net/dc/rest/"; //必填 private static string appId; private static string accountId; private static int platform; private static string gameRegion; private static string channel; //选填 private static string appVersion; private static string roleId; private static string roleName; private static string roleClass; private static string roleRace; private static int accountType; // private static string mac; private static string imei; private static int gender; private static int age; private static string resolution; private static string osVersion; private static string brand; private static string language; private static int netType; private static string ip; private static string country; private static string province; private static string operators; public static void MakeDict() { if (requestDict == null) { requestDict = new Dictionary(); requestDict.Add(RequestType.ActOrReg, "actOrReg?"); requestDict.Add(RequestType.Online, "online?"); requestDict.Add(RequestType.Pay, "pay?"); requestDict.Add(RequestType.VirtualCurrency, "coin?"); requestDict.Add(RequestType.BuyItem, "itemBuy?"); requestDict.Add(RequestType.UseItem, "itemUse?"); requestDict.Add(RequestType.GetItem, "itemGet?"); requestDict.Add(RequestType.Task, "task?"); requestDict.Add(RequestType.LevelUp, "levelUp?"); requestDict.Add(RequestType.CustomEvent, "event?"); } } public static void Init(string appId, PlatformType platform, string gameRegion, string channel) { MakeDict(); DataEyeGA.appId = appId; DataEyeGA.platform = platform.GetHashCode(); DataEyeGA.gameRegion = gameRegion; DataEyeGA.channel = channel; appVersion = Application.version; string hostName = System.Net.Dns.GetHostName(); ip = System.Net.Dns.GetHostEntry(hostName).AddressList.GetValue(0).ToString(); imei = SystemInfo.deviceUniqueIdentifier; resolution = Screen.width + "*" + Screen.height; osVersion = SystemInfo.operatingSystem; brand = SystemInfo.deviceModel; language = Application.systemLanguage.ToString(); if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork) netType = NetType._4G.GetHashCode(); else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork) netType = NetType.WIFI.GetHashCode(); isInited = true; } public static void SetAccount(string accountId, AccountType accountType, bool sendOnline = false) { if(!CheckIsInited()) return; DataEyeGA.accountId = accountId; DataEyeGA.accountType = accountType.GetHashCode(); if(sendOnline) Online(); isAccountSet = true; } public static void ActOrReg() { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("actTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); paramList.Add(new KeyValuePair("regTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.ActOrReg, paramList); } public static void Online(int level = 0) { if(!CheckIsInited()) return; if (DateUtil.GetRealTimeSinceStart() <= 60) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("loginTime", DateUtil.GetStandardTimeExistByTimeStamp().ToString())); paramList.Add(new KeyValuePair("onlineTime", DateUtil.GetRealTimeSinceStart().ToString())); paramList.Add(new KeyValuePair("level", level.ToString())); SendUrl(RequestType.Online, paramList); } /// /// /// 付费点 /// 订单ID public static void Pay(int currencyAmount, string currencyType, string iapid, string orderId) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("currencyAmount", currencyAmount.ToString())); paramList.Add(new KeyValuePair("currencyType", currencyType)); paramList.Add(new KeyValuePair("iapid", iapid)); paramList.Add(new KeyValuePair("orderId", orderId)); paramList.Add(new KeyValuePair("payTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.Pay, paramList); } /// /// 虚拟币类型 /// 获得虚拟的途径 /// 是否获得 0 消耗 1 获得 /// 该玩家手里最终持有的货币数量 public static void VirtualCurrency(string coinNum, string coinType, string type, bool isGain, int totalCoin) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("coinNum", coinNum)); paramList.Add(new KeyValuePair("coinType", coinType)); paramList.Add(new KeyValuePair("type", type)); paramList.Add(new KeyValuePair("isGain", isGain ? "1" : "0")); paramList.Add(new KeyValuePair("totalCoin", totalCoin.ToString())); paramList.Add(new KeyValuePair("msgTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.VirtualCurrency, paramList); } /// /// /// 购买的道具数量 /// 消耗虚拟币数量 /// 虚拟币种类 public static void BuyItem(string itemId, string itemType, string itemCnt, int coinNum, string coinType) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("itemId", itemId)); paramList.Add(new KeyValuePair("itemType", itemType)); paramList.Add(new KeyValuePair("itemCnt", itemCnt)); paramList.Add(new KeyValuePair("coinNum", coinNum.ToString())); paramList.Add(new KeyValuePair("coinType", coinType)); paramList.Add(new KeyValuePair("msgTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.BuyItem, paramList); } /// /// /// 购买的道具数量 /// 道具消耗的途径 public static void UseItem(string itemId, string itemType, string itemCnt, string reason) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("itemId", itemId)); paramList.Add(new KeyValuePair("itemType", itemType)); paramList.Add(new KeyValuePair("itemCnt", itemCnt)); paramList.Add(new KeyValuePair("reason", reason)); paramList.Add(new KeyValuePair("msgTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.UseItem, paramList); } /// /// /// 购买的道具数量 /// 道具获得的途径 public static void GetItem(string itemId, string itemType, string itemCnt, string reason) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("itemId", itemId)); paramList.Add(new KeyValuePair("itemType", itemType)); paramList.Add(new KeyValuePair("itemCnt", itemCnt)); paramList.Add(new KeyValuePair("reason", reason)); paramList.Add(new KeyValuePair("msgTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.GetItem, paramList); } /// 任务ID /// 任务类型 /// 任务耗时 /// 是否失败 0 任务失败 1 任务完成 /// 任务失败原因 public static void Task(string taskId, TaskType taskType, int duration, bool isSucc, string reason) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("taskId", taskId)); paramList.Add(new KeyValuePair("taskType", taskType.GetHashCode().ToString())); paramList.Add(new KeyValuePair("duration", duration.ToString())); paramList.Add(new KeyValuePair("isSucc", isSucc ? "1" : "0")); paramList.Add(new KeyValuePair("reason", reason)); paramList.Add(new KeyValuePair("msgTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.Task, paramList); } /// 开始等级 /// 结束等级 /// 升级时长(秒) public static void LevelUp(int startLevel, int endLevel, int interval) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("startLevel", startLevel.ToString())); paramList.Add(new KeyValuePair("endLevel", endLevel.ToString())); paramList.Add(new KeyValuePair("interval", interval.ToString())); paramList.Add(new KeyValuePair("msgTime", DateUtil.GetCurrentTimeByStandardTime().ToString())); SendUrl(RequestType.LevelUp, paramList); } /// /// 触发自定义事件 /// /// 事件id /// 事件耗时(秒) /// 参数列表 public static void CustomEvent(string eventId, int duration, List> labelMapList) { if(!CheckIsInited()) return; List> paramList = new List>(); paramList.Add(new KeyValuePair("eventId", eventId)); paramList.Add(new KeyValuePair("duration", duration.ToString())); string labelMap = "{"; for(int i=0; i("labelMap", labelMap)); SendUrl(RequestType.CustomEvent, paramList); } private static bool CheckIsInited(){ if(isInited) return true; else{ Debug.Log("DataEyeGA is not Inited!"); return false; } } private static string SendUrl(RequestType requestType, List> specialParamList = null) { string url = urlPrefix + requestDict[requestType]; url += "appId=" + appId; url += "&accountId=" + accountId; url += "&platform=" + platform; url += "&gameRegion=" + gameRegion; url += "&channel=" + channel; url += "&appVersion=" + appVersion; url += "&accountType=" + accountType; // url += "&mac=" + mac; url += "&ip=" + ip; url += "&imei=" + imei; url += "&resolution=" + resolution; url += "&osVersion=" + WWW.EscapeURL(osVersion); url += "&brand=" + WWW.EscapeURL(brand); url += "&language=" + language; url += "&netType=" + netType; if(specialParamList != null) { for(int i=0; i