namespace FlowerPower { using System.Text; using UnityEngine.Events; using System.Collections; using UnityEngine.Networking; using System.Collections.Generic; using Newtonsoft.Json; using UnityEngine; using System; using DG.Tweening; using Unity.VisualScripting; public class NetworkKit { public static string CDNUrl; //打点需要的值-----began---- public static string trace_id; public static string channel_id; public static long userId; //打点需要的值-----end---- public static Dictionary statusDic = new Dictionary(); public static Dictionary> statusDic2 = new Dictionary>(); public static string GetCacheToken() { string token = null; if (PlayerPrefsKit.HasKey(PrefsKeyConst.JarvisToken)) { token = PlayerPrefsKit.ReadString(PrefsKeyConst.JarvisToken); } return token; } public static void SetCacheToken(string token) { PlayerPrefsKit.WriteString(PrefsKeyConst.JarvisToken, token); } private static IEnumerator PostInternal(string url, object requestData, UnityAction onCompleted, Dictionary header = null) { var requestJson = SerializeUtil.ToJsonIndented(requestData); var url2 = url; #if FlowerPowerRelease url2 = Base64Kit.Encode(url); requestJson = Base64Kit.Encode(requestJson); #endif var bytes = Encoding.UTF8.GetBytes(requestJson); var url1 = NetworkManager.crazyUrl + url2; var loginRequest = new UnityWebRequest(url1, UnityWebRequest.kHttpVerbPOST) { uploadHandler = new UploadHandlerRaw(bytes), downloadHandler = new DownloadHandlerBuffer(), timeout = 10 // 设置超时时间为10秒 }; if (header != null) { foreach (var keyValuePair in header) { loginRequest.SetRequestHeader(keyValuePair.Key, keyValuePair.Value); } } SetRequestContentType(loginRequest); // Debug.Log($"request url1======= {url1}"); yield return loginRequest.SendWebRequest(); // Debug.Log($"requestData11111======={url1}=={requestJson}"); // Debug.Log($"requestData22222====={url1}==={JsonConvert.SerializeObject(loginRequest)}"); if (loginRequest.result is not UnityWebRequest.Result.Success) { onCompleted?.Invoke(false, default); } else { var receiveContent = loginRequest.downloadHandler.text; #if FlowerPowerRelease if (!receiveContent.IsNullOrWhiteSpace()) { receiveContent = receiveContent.Substring(0, receiveContent.Length - 1); receiveContent = receiveContent.Substring(1); receiveContent = Base64Kit.Decode(receiveContent,NetworkManager.DomainRelease); } #endif var response = SerializeUtil.ToObject(receiveContent); var respJson = ""; #if UNITY_EDITOR respJson = JsonConvert.SerializeObject(response); Debug.Log($"requestData======={url1}=={requestJson}"); Debug.Log($"response========={respJson}"); #endif if (response?.code == 0) { var responseData = SerializeUtil.ToObject(response.data.ToString()); onCompleted?.Invoke(true, responseData); } else { if(response.code == 1005) { ReLoginGetToken(); } if (url == "shop/applePayCheck"){ respJson = JsonConvert.SerializeObject(response); var responseData = SerializeUtil.ToObject(respJson.ToString()); onCompleted?.Invoke(false, responseData); } else { onCompleted?.Invoke(false, default); } } } loginRequest.Dispose(); } public static void SetRequestContentType(UnityWebRequest request) { request.SetRequestHeader("Content-Type", "application/json;charset=utf-8"); } public static void Post(string url, object requestData, UnityAction onCompleted) { CrazyAsyKit.StartCoroutine(PostInternal(url, requestData, onCompleted)); } public static void PostWithHeader(string url, object requestData = null, UnityAction onCompleted = null) { ReSetToken(); var headers = new Dictionary { { "x-token", GetCacheToken() } }; CrazyAsyKit.StartCoroutine(PostInternal(url, requestData, onCompleted, headers)); } public static void PostWithHeader(string url, UnityAction onCompleted) { if (onCompleted != null) { PostWithHeader(url, null, (isSuccess, obj) => { onCompleted.Invoke(isSuccess, obj); }); } else { PostWithHeader(url); } } public static void PostWithHeader(string url, object requestData = null, UnityAction onCompleted = null) { if (onCompleted != null) { PostWithHeader(url, requestData, (isSuccess, obj) => { onCompleted?.Invoke(isSuccess); }); } else { PostWithHeader(url, requestData); } } public static void PostFunnelLogin(RespLoginFunnelData reqData = null) { if (statusDic.TryGetValue(reqData.type, out var status)) { if (status) { return; } } if (reqData.type == "bootstrap") { long timestamp = DateTime.Now.ToUniversalTime().Ticks - 621355968000000000; trace_id = timestamp.ToString(); } var requestData = new RespLoginFunnelData { uid = userId, trace_id = trace_id, device_id = SystemInfo.deviceUniqueIdentifier, pack_name = NetworkManager.identifier, version = Application.version, channel = SuperApplication.Instance.attribution, type = reqData.type, payload = reqData.payload }; statusDic.Add(reqData.type, true); // Debug.Log($"PostFunnelLogin requestData1111========={reqData.type}"); Post("event/funnelLogin", requestData, (isSuccess, data) => { // Debug.Log($"PostFunnelLogin responseData2222========={isSuccess}{reqData.type}"); }); } public static void SendLogToServer(RespDebugData reqData) { // Debug.Log("SendLogToServer ====" + GameHelper.GetLoginModel().debug_log); if (!GameHelper.GetLoginModel().debug_log) return; // 如果只需要日期部分,可以使用ToShortDateString()或ToString("yyyy-MM-dd")等进行格式化 System.DateTime currentDate = System.DateTime.Now; var formattedDate = currentDate.ToString("yyyy_MM_dd_HH_mm"); var md5Str = MD5Kit.GetStringMD5(reqData.message + reqData.stacktrace); if (!statusDic2.ContainsKey(formattedDate)) { statusDic2.Add(formattedDate, new Dictionary()); } if (!statusDic2[formattedDate].ContainsKey(md5Str)) { statusDic2[formattedDate].Add(md5Str, false); } // Debug.Log($"SendLogToServer requestData========={formattedDate} \nmd5Str=== {md5Str}"); if (statusDic2[formattedDate][md5Str]) { return; } var requestData = new RespDebugData { uid = userId, device = SystemInfo.deviceModel, os_ver = SystemInfo.operatingSystem, network = GetNetworkType(), device_id = SystemInfo.deviceUniqueIdentifier, pack_name = NetworkManager.identifier, version = Application.version, level = reqData.level, message = reqData.message, stacktrace = reqData.stacktrace, channel = SuperApplication.Instance.attribution, }; statusDic2[formattedDate][md5Str] = true; //Debug.Log($"SendLogToServer requestData1========={JsonConvert.SerializeObject(requestData)}"); Post("event/cliDebugLog", requestData, (isSuccess, data) => { }); } public static string GetNetworkType() { switch (Application.internetReachability) { case NetworkReachability.ReachableViaCarrierDataNetwork: return NetworkType.mobile; case NetworkReachability.ReachableViaLocalAreaNetwork: return NetworkType.wifi; case NetworkReachability.NotReachable: return NetworkType.notConnected; default: return NetworkType.notConnected; } } public static BuriedPointObject buriedPointObject = new BuriedPointObject(); /* * 打点 */ public static void BuriedPoint(string eventname, string eventproperty, int integer) { if (eventname == BuriedPointEvent.Apple_AD_event || eventname == BuriedPointEvent.Apple_pay_event) { if (GameHelper.IsAdModelOfPay()) { eventname = BuriedPointEvent.Apple_AD_event; } else { int rate = GameHelper.GetCommonModel().PayRate; if (!GameHelper.IsGiftSwitch() || GameHelper.GetCommonModel().PayRate == 100) { MaxPayManager.isIOSPay = true; } eventname = MaxPayManager.isIOSPay ? BuriedPointEvent.Apple_ios_pay_event : BuriedPointEvent.Apple_pay_event; } } if (eventproperty == BuriedPointEvent.afterRewardAdShow || eventproperty == BuriedPointEvent.afterRewardAdEnd) { eventname = BuriedPointEvent.Apple_AD_event; } buriedPointObject.@event = eventname; buriedPointObject.property = eventproperty; buriedPointObject.n = integer; PostWithHeader("/event/incrN", buriedPointObject, (isSuccess, obj) => { // Debug.Log(isSuccess); // Debug.Log(eventproperty); //Debug.Log(JsonUtility.ToJson(obj)); }); } private static bool isReqToken = false; public static void ReSetToken() { if (isReqToken) return; var nowTimes = GameHelper.GetNowTime(); var passtime = GameHelper.GetLoginModel().expires_at; // Debug.Log($"ReSetToken nowTimes:{nowTimes} passtime:{passtime}"); if (passtime == 0 || passtime - nowTimes > 3600) return; isReqToken = true; var headers = new Dictionary { { "x-token", GetCacheToken() } }; CrazyAsyKit.StartCoroutine(PostInternal("tokenRefresh", null, (isSuccess, tokenData) => { if (isSuccess) { LoginModel loginModel = GameHelper.GetLoginModel(); loginModel.token = tokenData.token; loginModel.expires_at = tokenData.expires_at; SetCacheToken(tokenData.token); } isReqToken = false; }, headers)); } private static bool isReqToken1 = false; public static void ReLoginGetToken() { if (isReqToken1) return; var requestLoginData = new RequestLoginData { device_id = SystemInfo.deviceUniqueIdentifier, pack_name = NetworkManager.identifier, app_version = Application.version, channel = SuperApplication.Instance.attribution, sim = NetworkManager.haveSimCard }; isReqToken1 = true; Post("login", requestLoginData, (isSuccess, loginData) =>{ if (isSuccess) { LoginModel loginModel = GameHelper.GetLoginModel(); loginModel.token = loginData.token; loginModel.expires_at = loginData.expires_at; SetCacheToken(loginData.token); } isReqToken1 = false; }); } } public class NetworkType{ public static string mobile = "Mobile Data"; public static string wifi = "Wi-Fi"; public static string notConnected = "Not Connected"; } public class BuriedPointObject { public string @event; public string property; public int n; } public class BuriedPointEvent { public static string play_event = "Number_of_people_play"; public static string play_property = "Number_of_people_playing"; public static string playing_event = "Playing_time"; public static string playing_property = "Room_type"; public static string ad_task = "ad_task"; public static string watch_ad_number = "watch_ad_number"; public static string finish_ad_number = "finish_ad_number"; public static string h5_event = "H5_task"; public static string h5_event_time = "H5_time"; public static string h5_event_numbers = "finish_H5_number"; public static string withdraw_behavior = "withdraw_behavior"; public static string withdraw_message = "withdraw_message"; public static string ww_ch1 = "ww_ch1"; public static string ww_ch2 = "ww_ch2"; public static string ww_ch3 = "ww_ch3"; public static string Hall_behavior = "Hall_behavior"; public static string open_hall_number = "open_hall_number"; //public static string open_hall_people = "open_hall_people"; public static string collect_fly_number = "collect_fly_number"; //public static string collect_fly_people = "collect_fly_people"; public static string fly_ct_number = "fly_ct_number"; //public static string fly_ct_people = "fly_ct_people"; public static string annular_finish_number = "annular_finish_number"; public static string annular_get_number = "annular_get_number"; public static string annular_ct_number = "annular_ct_number"; //public static string annular_ct_people = "annular_ct_people"; public static string video_behavior = "video_behavior"; public static string watch_ad_people = "watch_ad_people"; public static string watch_success_ad_people = "watch_success_ad_people"; public static string video_type = "video_type"; public static string Rewarded_videos_trigger_number = "Rewarded_videos_trigger_number"; public static string Rewarded_videos_fill_number = "Rewarded_videos_fill_number"; public static string Rewarded_videos_dinish_number = "Rewarded_videos_dinish_number"; public static string Interstitial_videos_trigger_number = "Interstitial_videos_trigger_number"; public static string Interstitial_videos_fill_number = "Interstitial_videos_fill_number"; public static string Interstitial_videos_dinish_number = "Interstitial_videos_dinish_number"; public static string open_ad = "open_ad"; public static string open_show = "open_show"; public static string open_show_people = "open_show_people"; public static string Apple_pay_event = "Max_pay_Event"; public static string Apple_AD_event = "AD_Event"; public static string Apple_ios_pay_event = "IOS_Pay_Event"; public static string pack_show = "pack_show"; public static string pack_click = "pack_click"; public static string pack_open = "pack_open"; public static string pack_success = "pack_success"; public static string remove_ad_show = "remove_ad_show"; public static string remove_ad_click = "remove_ad_click"; public static string remove_ad_open = "remove_ad_open"; public static string remove_ad_success = "remove_ad_success"; public static string pass_show = "pass_show"; public static string pass_click = "pass_click"; public static string pass_open = "pass_open"; public static string pass_success = "pass_success"; public static string buy_one_show = "buy_one_show"; public static string buy_one_click = "buy_one_click"; public static string buy_one_open = "buy_one_open"; public static string buy_one_success = "buy_one_success"; public static string buy_super_show = "buy_one_show"; public static string buy_super_click = "buy_one_click"; public static string buy_super_open = "buy_one_open"; public static string buy_super_success = "buy_one_success"; public static string BuyOneOffShow = "BuyOneOffShow"; public static string BuyOneOffClick = "BuyOneOffClick"; public static string BuyOneOffOpen = "BuyOneOffOpen"; public static string BuyOneOffSuccess = "BuyOneOffSuccess"; public static string BuyOneNewShow = "BuyOneNewShow"; public static string BuyOneNewClick = "BuyOneNewClick"; public static string BuyOneNewSuccess = "BuyOneNewSuccess"; public static string makeupAdTaskClick = "makeupAdTaskClick"; public static string gold_show = "shop_show"; public static string gold_click_ad = "gold_click_ad"; public static string gold_click_1 = "gold_click_1"; public static string gold_click_2 = "gold_click_2"; public static string gold_click_3 = "gold_click_3"; public static string gold_click_4 = "gold_click_4"; public static string gold_open_1 = "gold_open_1"; public static string gold_open_2 = "gold_open_2"; public static string gold_open_3 = "gold_open_3"; public static string gold_open_4 = "gold_open_4"; public static string gold_success_1 = "gold_success_1"; public static string gold_success_2 = "gold_success_2"; public static string gold_success_3 = "gold_success_3"; public static string gold_success_4 = "gold_success_4"; public static string afterRewardAdShow = "afterRewardAdShow"; public static string afterRewardAdEnd = "afterRewardAdEnd"; public static string fail_show = "fail_show"; public static string fail_click = "fail_click"; public static string fail_buy_success = "fail_buy_success"; public static string fail_open = "fail_open"; public static string three_days_gift_show = "three_days_gift_show"; public static string three_days_gift_click = "three_days_gift_click"; public static string three_days_gift_buy_success = "three_days_gift_buy_success"; public static string three_days_gift_open = "three_days_gift_open"; public static string three_day1_success = "three_day1_success"; public static string three_day2_success = "three_day2_success"; public static string three_day3_success = "three_day3_success"; public static string Three_days_gift_event = "Three_days_gift_event"; public static string rank_event = "rank_event"; public static string rank_show = "rank_show"; } }