using UnityEngine; using LitJson; using UnityEngine.Events; using System.Collections; using System.Collections.Generic; using System.IO; using System; public class SDKUtils : SingletonMonobehaviour { public enum E_ChargingType { NoCharging = 1, Charging = 2, ChargingFull = 3, } public enum E_ChannelPlatform { Free = 1,// 默认 Quick = 10, //quick Hy = 15, //欢游 Gaore = 20, // 20-高热 - 硬核渠道 Qudong = 21, //21-趣动 - 海外渠道 } //权限申请回调 private Action onPermissionCallBack; public event Action onSdkMsg; public E_ChannelPlatform ChannelPlatform { get; set; } public static string Yj_AppID { get; private set; } public static string ThirdPartVersion { get; private set; } public static string Yj_SpID { get; private set; } public static string ThirdPartAppID { get; private set; } public static string Yj_BanHao { get; private set; } public static string channelSign = ""; //不同渠道的打包标识 // 是否同意隐私政策 public bool IsAgreeSecret = false; /// /// sdk初始化是否完成标识 /// 客户端一般需要等待这个值为true才继续逻辑 /// public bool InitFinished { get; set; } #region 基础定义与回调 /// /// 当前设备电量值 /// public int BatteryLevel { get; private set; } /// /// 设备电量值改变回调 /// public UnityAction OnBatteryLevelChanged; /// /// 当前充电状态 /// public E_ChargingType ChargingType { get; private set; } /// /// 当前充电状态改变回调 /// public UnityAction OnChargingTypeChanged; /// /// 设备信息 /// public DeviceInfo Device { get; private set; } /// /// 设备信息改变回调 /// public UnityAction OnDeviceInfoChanged; /// /// 当前网络状态 /// public NetworkReachability NetworkType { get; private set; } /// /// 当前网络状态改变回调 /// public UnityAction OnNetworkStatusChanged; public static bool builtinAssetCopyFinished { get; internal set; } /// /// 是否已经将StreamingAsset拷贝至目标路径 /// public bool AssetCopyFinished { get; private set; } /// /// 安卓设备根目录 /// public string DeviceRootPath { get; private set; } #endregion #region 极光推送 public string RegistrationID { get; private set; } #endregion #region 自由sdk public FP_LoginOk FreePlatformInfo { get; set; } #endregion private JsonData m_Json = new JsonData(); // 当前平台SDK实现 private SDKBaseImpl m_impl; private SDKBaseImpl CreateImpl() { #if UNITY_ANDROID return new SDKAndroidImpl(this); #elif UNITY_WEBGL return new SDKWebGLImpl(this); #else return null; // Editor/Standalone: SendMessageToSDK在Editor下直接跳过 #endif } public void Init() { Device = new DeviceInfo(); string uid = LocalSave.GetString("Device_uniqueID"); //Debug.Log(Math.Abs(System.Environment.TickCount)); if (uid.Length <= 5) { long tick = Math.Abs(System.Environment.TickCount); uid = tick.ToString() + UnityEngine.Random.Range(1, ulong.MaxValue/*Constants.ExpPointValue*/).ToString(); LocalSave.SetString("Device_uniqueID", uid); } Device.uniqueID = uid; Debug.Log(Device.uniqueID); Yj_AppID = string.Empty; Yj_SpID = string.Empty; ThirdPartVersion = string.Empty; RegistrationID = string.Empty; AssetCopyFinished = false; ChannelPlatform = E_ChannelPlatform.Free; NetworkType = NetworkReachability.NotReachable; BatteryLevel = 100; m_impl = CreateImpl(); #if !UNITY_EDITOR if (InitFinished) { return; } m_impl?.InitPlatform(); #if UNITY_IOS || UNITY_STANDALONE var builtinAssetsCopyFinishVersion = LocalSave.GetString("BuiltInAssetCopyCompleted_IOSorStandalone"); if (string.IsNullOrEmpty(builtinAssetsCopyFinishVersion)) { builtinAssetCopyFinished = false; } else { builtinAssetCopyFinished = VersionConfig.Get().version == builtinAssetsCopyFinishVersion; } var assetsCopyFinishVersion = LocalSave.GetString("AssetCopyCompleted_IOSorStandalone"); if (string.IsNullOrEmpty(assetsCopyFinishVersion)) { AssetCopyFinished = false; } else { AssetCopyFinished = VersionConfig.Get().version == assetsCopyFinishVersion; } #endif InitFinished = false; m_Json.Clear(); m_Json["code"] = CodeU2A.Init; m_Json["appID"] = VersionConfig.Get().appId; m_Json["gameID"] = VersionConfig.Get().gameId; SendMessageToSDK(m_Json); #endif StartCoroutine("ProcessNetworkStatus"); } private void OnApplicationFocus(bool focus) { #if !UNITY_EDITOR m_Json.Clear(); if (focus) { m_Json["code"] = CodeU2A.BatteryListenStart; StopCoroutine("ProcessNetworkStatus"); StartCoroutine("ProcessNetworkStatus"); } else { m_Json["code"] = CodeU2A.BatteryListenStop; StopCoroutine("ProcessNetworkStatus"); } SendMessageToSDK(m_Json); #endif } private IEnumerator ProcessNetworkStatus() { while (true) { if (Application.internetReachability != NetworkType) { NetworkType = Application.internetReachability; if (OnNetworkStatusChanged != null) { OnNetworkStatusChanged(NetworkType); } } yield return new WaitForSeconds(1f); // yield return WaitingForSecondConst.WaitMS1000; } } #region 业务层定义相关逻辑 public void InstallAPK(string path) { if (Application.platform == RuntimePlatform.Android) { var dllPath1 = ResourcesPath.Instance.ExternalStorePath + "Assembly-CSharp-firstpass.dll"; if (File.Exists(dllPath1)) { File.Delete(dllPath1); } var dllPath2 = ResourcesPath.Instance.ExternalStorePath + "Assembly-CSharp.dll"; if (File.Exists(dllPath2)) { File.Delete(dllPath2); } } m_Json.Clear(); m_Json["code"] = CodeU2A.InstallAPK; m_Json["path"] = path; SendMessageToSDK(m_Json); } //0 :拷贝所有资源 1:拷贝Config public void CopyAsset(int copyType = 0) { if (AssetCopyFinished) { return; } m_Json.Clear(); m_Json["code"] = CodeU2A.CopyAsset; m_Json["copyType"] = copyType; SendMessageToSDK(m_Json); } public void CopyOneAsset(string relationPath) { m_Json.Clear(); m_Json["code"] = CodeU2A.CopyOneAsset; m_Json["fileName"] = relationPath; SendMessageToSDK(m_Json); } public void CopyContent(string content) { m_Json.Clear(); m_Json["code"] = CodeU2A.CopyContent; m_Json["content"] = content; SendMessageToSDK(m_Json); } public void RestartApp() { m_Json.Clear(); m_Json["code"] = CodeU2A.RestartApp; SendMessageToSDK(m_Json); } public void OpenUrl(string url) { m_Json.Clear(); m_Json["code"] = CodeU2A.OpenWebView; m_Json["url"] = url; SendMessageToSDK(m_Json); } public void MakeKeyAndVisible() { m_Json.Clear(); m_Json["code"] = CodeU2A.MakeKeyAndVisible; SendMessageToSDK(m_Json); } public void RequestSecretRule() { m_Json.Clear(); m_Json["code"] = CodeU2A.RequestSecretRule; SendMessageToSDK(m_Json); } /// 同步客户端包ID(委托给平台实现) public void SyncClientPackageID() => m_impl?.SyncClientPackageID(); /// 动态申请Android权限(非Android平台为空操作) public void RequestAndroidPermission(string permission, Action callBack) => m_impl?.RequestPermission(permission, callBack); /// 启动时批量申请权限(非Android平台为空操作) public void RequestAndroidPermissionStart() => m_impl?.RequestPermissionStart(); //跳转应用商店 public void GoToAppStore(string url, string marketPkg = "") { m_Json.Clear(); m_Json["code"] = CodeU2A.GoToAppStore; m_Json["marketPkg"] = marketPkg; m_Json["url"] = url; SendMessageToSDK(m_Json); } //评分 public void GoToReview() { m_Json.Clear(); m_Json["code"] = CodeU2A.GoToReview; SendMessageToSDK(m_Json); } #endregion #region 处理与SDK交互的底层方法 public string GetSplicePackageID() { var _result = "default"; switch (Application.platform) { case RuntimePlatform.Android: _result = "android"; break; case RuntimePlatform.IPhonePlayer: _result = "ios";//ios平台固定返回ios break; } return _result; } private void SendMessageToSDK(JsonData json) { #if !UNITY_EDITOR var _jsonStr = json.ToJson(); #if UNITY_IOS AotSdkUtility.IOSUniyMessageHandle(_jsonStr); #else m_impl?.SendToNative(_jsonStr); #endif #endif } /// 供平台实现类调用的便捷发包方法(带可选JSON填充) internal void SendSdkMessage(int code, Action fillJson = null) { m_Json.Clear(); m_Json["code"] = code; fillJson?.Invoke(m_Json); SendMessageToSDK(m_Json); } /// 供平台实现类注册权限回调 internal void RegisterPermissionCallback(Action callBack) { onPermissionCallBack += callBack; } public void HandleMsgWithSDK(string jsonString) { Debug.Log("收到SDK发来的信息: " + jsonString); var _json = JsonMapper.ToObject(jsonString); var _code = (int)_json["code"]; switch (_code) { case CodeA2U.DeviceInfo: //Device.uniqueID = _json["unique_id"].ToString(); Device.androidID = _json["android_id"].ToString();// ios平台下为idfa Device.userAgent = _json["userAgent"].ToString(); m_impl?.FillDeviceInfo(_json); if (OnDeviceInfoChanged != null) { OnDeviceInfoChanged(Device); } break; case CodeA2U.AssetCopyFinished: AssetCopyFinished = true; break; case CodeA2U.BatteryLevel: BatteryLevel = (int)_json["level"]; if (OnBatteryLevelChanged != null) { OnBatteryLevelChanged(BatteryLevel); } break; case CodeA2U.BatteryCharging: ChargingType = (E_ChargingType)((int)_json["status"]); if (OnChargingTypeChanged != null) { OnChargingTypeChanged(ChargingType); } break; case CodeA2U.SdkInitComplete: InitFinished = true; var _dict = _json as IDictionary; if (_dict != null && _dict.Contains("channelPlatform")) { var _channelPlatform = _json["channelPlatform"].ToString(); if (!string.IsNullOrEmpty(_channelPlatform)) { if (_channelPlatform.Equals("hygame")) { ChannelPlatform = E_ChannelPlatform.Hy; } else if (_channelPlatform.Equals("quick")) { ChannelPlatform = E_ChannelPlatform.Quick; } else if (_channelPlatform.Equals("gaore")) { ChannelPlatform = E_ChannelPlatform.Gaore; } else if (_channelPlatform.Equals("sghy")) { ChannelPlatform = E_ChannelPlatform.Qudong; } } } //Sdk 可能会修改渠道信息,所以需要重新获取 if (_dict.Contains("yj_appid")) { Yj_AppID = _json["yj_appid"].ToString(); } if (_dict.Contains("yj_spid")) { Yj_SpID = _json["yj_spid"].ToString(); } if (_dict.Contains("banhao")) { Yj_BanHao = _json["banhao"].ToString(); } break; case CodeA2U.PushClientID: RegistrationID = _json["clientID"].ToString(); break; case CodeA2U.ExternalStorage: DeviceRootPath = _json["path"].ToString(); break; case CodeA2U.PermissionCallBack: { var state = (int)_json["state"]; var permission = (string)_json["permission"]; onPermissionCallBack?.Invoke(permission, state); onPermissionCallBack = null; break; } case CodeA2U.SecretRuleOK: { // 纯android处理,这里触发不到了 IsAgreeSecret = true; LocalSave.SetBool("secretToggleStart5", true); break; } case CodeA2U.FreePlatformInitOk: if (_json.Keys.Contains("channelSign")) { channelSign = _json["channelSign"].ToString(); } if (onFreePlatformInitOk != null) { onFreePlatformInitOk(); } OperationLogCollect.Instance.RecordLauchEvent(101); break; case CodeA2U.FreePlatformInitFail: if (onFreePlatformInitFail != null) { onFreePlatformInitFail(); } OperationLogCollect.Instance.RecordLauchEvent(102); break; case CodeA2U.FreePlatformRegisterOk: // HandleFreePlatformRegisteOk(_json); // OperationLogCollect.Instance.RecordEvent(5); var values = new JsonData(); if (_json.Keys.Contains("reg_type")) values["af_registration_method"] = _json["reg_type"]; break; case CodeA2U.FreePlatformLoginOk: HandleFreePlatformLoginOk(_json["info"]); OperationLogCollect.Instance.RecordLauchEvent(103); // OperationLogCollect.Instance.RecordEvent(6); break; case CodeA2U.FreePlatformLoginFail: if (onFreePlatformLoginFail != null) { onFreePlatformLoginFail(); } OperationLogCollect.Instance.RecordLauchEvent(104); break; case CodeA2U.FreePlatformLogoutOk: if (onFreePlatformLogoutOk != null) { onFreePlatformLogoutOk(); } FreePlatformInfo = null; break; case CodeA2U.FreePlatformSwitchAccountOk: BuildFreePlatformInfo(_json["info"]); if (onFreePlatformLogoutOk != null) { onFreePlatformLogoutOk(); } FreePlatformInfo = null; break; case CodeA2U.FreePlatformLogoutFail: if (onFreePlatformLogoutFail != null) { onFreePlatformLogoutFail(); } break; case CodeA2U.FreePlatformPayOk: if (onFreePlatformPayOk != null) { onFreePlatformPayOk(); } break; case CodeA2U.FreePlatformPayFail: if (onFreePlatformPayFail != null) { onFreePlatformPayFail(); } break; case CodeA2U.FreePlatformPayCancel: if (onFreePlatformPayCancel != null) { onFreePlatformPayCancel(); } break; case CodeA2U.ShareCallBack: { var state = int.Parse(_json["state"].ToString()); if (state == CallBackState.Success) LocalSave.SetInt("ShareToFBDay" + PlayerDatas.Instance.baseData.PlayerID, TimeUtility.ServerNow.DayOfYear); onShareFBResult?.Invoke(); break; } case CodeA2U.ExitGame: // if (ChannelPlatform == E_ChannelPlatform.Free) // { // // WindowCenter.Instance.Open(); // } // else { //默认都是退出游戏 m_impl?.ExitGame(); } break; case CodeA2U.GetAdAward: if (AdsManager.Instance.waitAdID > 0) { AdsManager.Instance.GetAdsAward(AdsManager.Instance.waitAdID); } break; case CodeA2U.AdLoadFail: AdsManager.Instance.lastLoadErrorTime = Time.time; break; } onSdkMsg?.Invoke(_code, _json); } #endregion #region 交互相关约定编号 //回调的相关状态 public static class CallBackState { public const int Cancel = 0; public const int Success = 1; public const int Error = 2; } public static class CodeA2U { #region 基础sdk_code /** * 资源拷贝完成 */ public const int AssetCopyFinished = 0; /** * 电量改变 */ public const int BatteryLevel = 1; /** * 充电状态改变 */ public const int BatteryCharging = 2; /** * 回调sdk逻辑完毕 * */ public const int SdkInitComplete = 3; /** * 回调android设备信息 * */ public const int DeviceInfo = 4; /** * 回调推送的独立id * */ public const int PushClientID = 5; /** * 回调外部存储根目录地址 */ public const int ExternalStorage = 6; /** * 触发了退出游戏逻辑, 打开二次确认界面 */ public const int ExitGame = 7; /** * 权限申请结果 */ public const int PermissionCallBack = 8; /** * 同意隐私协议 */ public const int SecretRuleOK = 9; #endregion #region 自由sdk_code public const int FreePlatformInitOk = 100; public const int FreePlatformInitFail = 101; public const int FreePlatformLoginOk = 102; public const int FreePlatformLoginFail = 103; public const int FreePlatformLoginCancel = 104; public const int FreePlatformLogoutOk = 105; public const int FreePlatformLogoutFail = 106; public const int FreePlatformSwitchAccountOk = 107; public const int FreePlatformPayOk = 108; public const int FreePlatformPayFail = 109; public const int FreePlatformPayCancel = 110; public const int FreePlatformRegisterOk = 111; public const int ShareCallBack = 112; public const int PingfenCallBack = 113; //评分回调 和 GotoShopOK 不一样 具体看使用区分 public const int GotoShopOK = 115; //前往商店成功 public const int GotoFBOK = 116; public const int GetAdAward = 117; //广告播放成功发放奖励 public const int AdLoadFail = 118; //广告加载失败 #endregion } public static class CodeU2A { /** * 执行资源拷贝 */ public const int CopyAsset = 0; /** * 执行开始电量改变,充电状态改变监听 */ public const int BatteryListenStart = 1; /** * 执行停止电量改变,充电状态改变监听 */ public const int BatteryListenStop = 2; /** * 获取唯一识别码 */ public const int UniqueID = 3; /** * 申请在AndroidManifest文件中 */ public const int RequestManifestPermissions = 4; /** * 单独动态申请某一个权限 */ public const int RequestPermission = 5; /** * 重启应用 */ public const int RestartApp = 6; /** * 拷贝文本信息 */ public const int CopyContent = 7; /** * 打开网址 */ public const int OpenWebView = 8; /** * SDK初始化, 完全自动初始化的流程, 完成必要逻辑后再回调回去 */ public const int Init = 9; /** * 安装应用 */ public const int InstallAPK = 10; /** * 外部存储根目录地址 */ public const int ExteneralStorage = 11; public const int CopyOneAsset = 12; //打开应用商店 public const int GoToAppStore = 13; // 启动时申请权限,申请规则sdk决定 public const int RequestPermissionStart = 14; public const int RequestSecretRule = 15; // 向SDK请求隐私协议 /** * 自由sdk相关 * */ public const int FreePlatformInit = 100; public const int FreePlatformLogin = 101; public const int FreePlatformLogout = 102; public const int FreePlatformSwitchAccount = 103; public const int FreePlatformPay = 104; public const int PayFinished = 105; public const int CreateRole = 106; public const int RoleLogin = 107; public const int RoleLevelUp = 108; public const int TencentLogin = 109; public const int DownloadStart = 110; public const int DownloadEnd = 111; public const int ShareToFaceBook = 112; public const int GoToReview = 113; //前往评分 和 GotoShop = 121; 有区别 public const int ShowAccountView = 114; public const int RoleLoginOut = 119; //角色登出 // public const int FansHouse = 120; //粉丝屋 论坛等 // public const int GotoShop = 121; //前往商店 public const int TrackEvent = 122; //自定义事件 public const int PlayAds = 123; //播放广告 /** * IOS特殊需求 */ public const int MakeKeyAndVisible = 300; /** * ClientPackage向sdk发送分包id */ public const int ClientPackage = 400; /** * 发送注册事件 */ public static int SendRegistEvent = 500; /** * 发送注册事件 */ public static int SendLoginEvent = 600; /** * 隐藏悬浮窗 */ public static int HideFloatIcon = 700; /** * 显示悬浮窗 */ public static int ShowFloatIcon = 701; } #endregion public class DeviceInfo { public string imei; public string macAddress; public string androidID; public string uniqueID; public string userAgent; public int totalMemory; } #region sdk相关 public UnityAction onFreePlatformInitOk; public UnityAction onFreePlatformInitFail; public UnityAction onFreePlatformLoginOk; public UnityAction onFreePlatformLoginFail; public UnityAction onFreePlatformLogoutOk; public UnityAction onFreePlatformLogoutFail; public UnityAction onFreePlatformPayOk; public UnityAction onFreePlatformPayFail; public UnityAction onFreePlatformPayCancel; public UnityAction onFreePlatformBindOk; public UnityAction onFreePlatformBindFail; public UnityAction onShareFBResult; public class FP_LoginOk { public string account;//必选,账号 public string token;//必选 public string tokenExpire; public int phone; public int accountID; public string gameId; public string timeStamp; public string sessionID; public string yjAppId; public string yjSdkId; public string qkUserName; // 目前当做原始UID使用,因为游戏中会统一小写 } public struct FP_CheckIDAuthentication { public string errorcode; public string errordesc; public string type; public string card_id; } public struct FP_DoIDAuthentication { public string errorcode; public string errordesc; public string card_id; } string authenticationCardId = ""; public string channelId = "1000"; public string platfromId = "1000"; public void FreePlatformInit() { #if !UNITY_EDITOR m_Json.Clear(); m_Json["code"] = CodeU2A.FreePlatformInit; SendMessageToSDK(m_Json); #endif } /// /// SDK登陆 /// public void FreePlatformLogin() { m_impl?.FreePlatformLogin(); } /// /// 自由SDK登出 /// public void FreePlatformLoginout() { #if !UNITY_EDITOR m_Json.Clear(); m_Json["code"] = CodeU2A.FreePlatformLogout; SendMessageToSDK(m_Json); // FreePlatformLogin(); #endif } /// /// 自由SDK支付 fixed sdk 支付逻辑修改 /// /// public void FreePlatformPay(string title, float money, string cpInfo) { // 提示是否使用代金券 var gameCash = UIHelper.GetAllVourcher(); bool isBuyGameCash = false; //代金券本身的充值不能用代金券购买 造成循环 int ctgID = RechargeManager.Instance.orderInfoToCTGID[cpInfo]; if (ctgID != 0) { isBuyGameCash = CTGConfig.Get(ctgID).PayType == 17; } if (!isBuyGameCash && gameCash >= money * 100) { UIManager.Instance.CloseWindow(); if (DayRemind.Instance.GetDayRemind(DayRemind.DJQTip)) { var pack = new CA125_tagCMCoinBuyOrderInfo(); pack.AppID = VersionConfig.Get().appId; pack.AppIDLen = (byte)pack.AppID.Length; pack.OrderInfo = cpInfo; pack.OrderInfoLen = (byte)pack.OrderInfo.Length; GameNetSystem.Instance.SendInfo(pack); } else { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("GameCashRule1", money, title), (bool isOk) => { if (isOk) { var pack = new CA125_tagCMCoinBuyOrderInfo(); pack.AppID = VersionConfig.Get().appId; pack.AppIDLen = (byte)pack.AppID.Length; pack.OrderInfo = cpInfo; pack.OrderInfoLen = (byte)pack.OrderInfo.Length; GameNetSystem.Instance.SendInfo(pack); } }); } } else { FreePlatformPayEx(title, money, cpInfo); } } public void FreePlatformPayEx(string title, float money, string cpInfo) { OrderInfoConfig orderInfo = null; var vipModel = RechargeManager.Instance; if (vipModel.orderInfoToCTGID.ContainsKey(cpInfo) && vipModel.orderInfoToCTGID[cpInfo] != 0) { vipModel.TryGetOrderInfo(vipModel.orderInfoToCTGID[cpInfo], out orderInfo); } else { var keys = OrderInfoConfig.GetKeys(); for (int i = 0; i < keys.Count; i++) { orderInfo = OrderInfoConfig.Get(keys[i]); if (orderInfo != null && orderInfo.OrderInfo == cpInfo) { break; } } } #if !(UNITY_IOS || UNITY_IPHONE) string storeOrderInfo = orderInfo.StoreOrderInfo; #else string storeOrderInfo = orderInfo.StoreOrderInfo2; #endif #if UNITY_EDITOR Debug.LogFormat("充值: {0}-{1}-{2}", title, money, cpInfo); return; #endif m_Json.Clear(); m_Json["code"] = CodeU2A.FreePlatformPay; m_Json["orderId"] = DateTime.Now.ToString("yyyyMMddHHmmss") + UnityEngine.Random.Range(100000, 999999).ToString(); m_Json["mount"] = money.ToString(); m_Json["cpInfo"] = cpInfo; m_Json["storeOrderInfo"] = storeOrderInfo; m_Json["title"] = title; m_Json["roleID"] = PlayerDatas.Instance.baseData.PlayerID; m_Json["roleName"] = PlayerDatas.Instance.baseData.PlayerName; m_Json["level"] = PlayerDatas.Instance.baseData.LV.ToString(); m_Json["sid"] = ServerListCenter.Instance.currentServer.region_flag; m_Json["serverName"] = ServerListCenter.Instance.currentServer.name; m_Json["familyName"] = PlayerDatas.Instance.baseData.FamilyName; m_Json["job"] = PlayerDatas.Instance.baseData.Job.ToString(); m_Json["money"] = PlayerDatas.Instance.baseData.diamond.ToString(); m_Json["gameName"] = VersionConfig.Get().productName; m_Json["vipLevel"] = PlayerDatas.Instance.baseData.VIPLv.ToString(); m_Json["createTime"] = TimeUtility.CreateSeconds.ToString(); m_Json["familyID"] = PlayerDatas.Instance.baseData.FamilyId.ToString(); m_Json["fightPower"] = PlayerDatas.Instance.baseData.FightPower.ToString(); m_Json["num"] = 1; #if UNITY_IOS m_Json["identifier"] = VersionConfig.Get().bundleIdentifier; #endif SendMessageToSDK(m_Json); } private void BuildFreePlatformInfo(JsonData json) { if (FreePlatformInfo == null) { FreePlatformInfo = new FP_LoginOk(); } IDictionary _iDict = json as IDictionary; if (_iDict.Contains("token")) { FreePlatformInfo.token = json["token"].ToString(); } if (_iDict.Contains("token_expire")) { FreePlatformInfo.tokenExpire = json["token_expire"].ToString(); } else { FreePlatformInfo.tokenExpire = ""; } if (_iDict.Contains("account")) { FreePlatformInfo.account = json["account"].ToString(); } if (_iDict.Contains("account_id")) { int.TryParse(json["account_id"].ToString(), out FreePlatformInfo.accountID); } if (_iDict.Contains("session_id")) { FreePlatformInfo.sessionID = (string)json["session_id"]; } if (_iDict.Contains("game_id")) { FreePlatformInfo.gameId = (string)json["game_id"]; } if (_iDict.Contains("timeStamp")) { FreePlatformInfo.timeStamp = (string)json["timeStamp"]; } if (_iDict.Contains("userName")) { FreePlatformInfo.qkUserName = json["userName"].ToString(); } FreePlatformInfo.phone = 0; } private void HandleFreePlatformLoginOk(JsonData data) { BuildFreePlatformInfo(data); Debug.LogFormat("sdk登录成功:{0}", data.ToJson()); if (onFreePlatformLoginOk != null) { onFreePlatformLoginOk(FreePlatformInfo); } } public void SendHideFloatWin() { m_Json.Clear(); m_Json["code"] = CodeU2A.HideFloatIcon; SendMessageToSDK(m_Json); } public void SendShowFloatWin() { m_Json.Clear(); m_Json["code"] = CodeU2A.ShowFloatIcon; SendMessageToSDK(m_Json); } public void CreateRoleOk(string roleID, string roleName, string time) { if (VersionConfig.Get().appId == "ryzj") { SendGaoreEvent(2); return; } m_Json.Clear(); m_Json["code"] = CodeU2A.CreateRole; m_Json["roleID"] = roleID; m_Json["roleName"] = roleName; m_Json["sid"] = ServerListCenter.Instance.currentServer.region_flag; m_Json["serverName"] = ServerListCenter.Instance.currentServer.name; m_Json["familyName"] = PlayerDatas.Instance.baseData.FamilyName; m_Json["level"] = "1"; m_Json["job"] = PlayerDatas.Instance.baseData.Job.ToString(); m_Json["money"] = PlayerDatas.Instance.baseData.diamond.ToString(); m_Json["gameName"] = VersionConfig.Get().productName; m_Json["vipLevel"] = PlayerDatas.Instance.baseData.VIPLv.ToString(); m_Json["createTime"] = time; m_Json["familyID"] = PlayerDatas.Instance.baseData.FamilyId.ToString(); m_Json["fightPower"] = PlayerDatas.Instance.baseData.FightPower.ToString(); SendMessageToSDK(m_Json); } public void DownloadStart() { m_Json.Clear(); m_Json["code"] = CodeU2A.DownloadStart; SendMessageToSDK(m_Json); } public void DownloadEnd() { m_Json.Clear(); m_Json["code"] = CodeU2A.DownloadEnd; SendMessageToSDK(m_Json); } public void RoleLogin() { if (VersionConfig.Get().appId == "ryzj") { SendGaoreEvent(3); return; } m_Json.Clear(); m_Json["code"] = CodeU2A.RoleLogin; m_Json["roleID"] = PlayerDatas.Instance.baseData.PlayerID.ToString(); m_Json["roleName"] = PlayerDatas.Instance.baseData.PlayerName; m_Json["sid"] = ServerListCenter.Instance.currentServer.region_flag; m_Json["serverName"] = ServerListCenter.Instance.currentServer.name; m_Json["familyName"] = PlayerDatas.Instance.baseData.FamilyName; m_Json["level"] = PlayerDatas.Instance.baseData.LV; m_Json["job"] = PlayerDatas.Instance.baseData.Job.ToString(); m_Json["money"] = PlayerDatas.Instance.baseData.diamond.ToString(); m_Json["gameName"] = VersionConfig.Get().productName; m_Json["vipLevel"] = PlayerDatas.Instance.baseData.VIPLv.ToString(); m_Json["createTime"] = TimeUtility.CreateSeconds.ToString(); m_Json["familyID"] = PlayerDatas.Instance.baseData.FamilyId.ToString(); m_Json["fightPower"] = PlayerDatas.Instance.baseData.FightPower.ToString(); SendMessageToSDK(m_Json); } //事件名称 由运营提供 //必传的2个事件, // "tutorial_complete" 完成新手引导。 // "AchieveLevel_40" 到达40级 void SendOverSeaTraceEvent(string eventName, string value = "") { //海外趣动版本,如有其他海外不同需区分 m_Json.Clear(); m_Json["code"] = CodeU2A.TrackEvent; m_Json["eventName"] = eventName; m_Json["value"] = value; SendMessageToSDK(m_Json); } //高热版本 void SendGaoreEvent(int dataType, string pageType = "无", string pageName = "无", string pageItemId = "无", int money = 0, string orderID = "") { m_Json.Clear(); m_Json["code"] = CodeU2A.TrackEvent; m_Json["dataType"] = dataType; m_Json["sid"] = ServerListCenter.Instance.currentServer.region_flag; m_Json["serverName"] = ServerListCenter.Instance.currentServer.name; m_Json["roleName"] = PlayerDatas.Instance.baseData.PlayerName; m_Json["level"] = PlayerDatas.Instance.baseData.LV; m_Json["roleID"] = PlayerDatas.Instance.baseData.PlayerID; m_Json["orderId"] = orderID; m_Json["mount"] = money; //充值分 m_Json["money"] = PlayerDatas.Instance.baseData.diamond; m_Json["createTime"] = TimeUtility.CreateSeconds < 0 ? 0 : TimeUtility.CreateSeconds; m_Json["familyID"] = PlayerDatas.Instance.baseData.FamilyId; m_Json["familyName"] = PlayerDatas.Instance.baseData.FamilyName; m_Json["familyLV"] = PlayerDatas.Instance.fairyData.fairy != null ? PlayerDatas.Instance.fairyData.fairy.FamilyLV.ToString() : "0"; m_Json["familyLeaderName"] = PlayerDatas.Instance.fairyData.fairy != null ? PlayerDatas.Instance.fairyData.fairy.LeaderName : ""; m_Json["fightPower"] = PlayerDatas.Instance.baseData.FightPower; m_Json["job"] = 0; m_Json["jobName"] = "无"; m_Json["sex"] = "无"; m_Json["jobID"] = 0; m_Json["jobIDName"] = "无"; m_Json["vipLevel"] = 0; if (PlayerDatas.Instance.fairyData.mine != null && PlayerDatas.Instance.fairyData.mine.FmLV > 0) { if (PlayerDatas.Instance.fairyData.mine.FmLV == 3) { m_Json["faimilyRoleID"] = 1; } else if (PlayerDatas.Instance.fairyData.mine.FmLV == 2) { m_Json["faimilyRoleID"] = 2; } else { m_Json["faimilyRoleID"] = 3; } m_Json["faimilyRoleName"] = RichTextMsgReplaceConfig.GetRichReplace("FAMILY", PlayerDatas.Instance.fairyData.mine.FmLV); } else { m_Json["faimilyRoleID"] = 0; m_Json["faimilyRoleName"] = "无"; } m_Json["opentime"] = TimeUtility.openServerTick; m_Json["pageType"] = pageType; m_Json["pageName"] = pageName; m_Json["pageItemId"] = pageItemId; SendMessageToSDK(m_Json); } //事件记录 public void SendTraceEvent(int dataType, string pageType = "无", string pageName = "无", string pageItemId = "无", int money = 0, string orderID = "") { var appID = VersionConfig.Get().appId; if (VersionConfig.Get().appId == "ryzj") { SendGaoreEvent(dataType, pageType, pageName, pageItemId, money, orderID); return; } else if (appID == "sghy") { SendOverSeaTraceEvent("tutorial_complete"); } } public void RoleLevelUp() { var appID = VersionConfig.Get().appId; if (appID == "ryzj") { SendGaoreEvent(4); return; } else if (appID == "sghy" && PlayerDatas.Instance.baseData.LV == 40) { SendOverSeaTraceEvent("AchieveLevel_40"); } m_Json.Clear(); m_Json["code"] = CodeU2A.RoleLevelUp; m_Json["roleID"] = PlayerDatas.Instance.PlayerId.ToString(); m_Json["roleName"] = PlayerDatas.Instance.baseData.PlayerName; m_Json["sid"] = ServerListCenter.Instance.currentServer.region_flag; m_Json["serverName"] = ServerListCenter.Instance.currentServer.name; m_Json["familyName"] = PlayerDatas.Instance.baseData.FamilyName; m_Json["level"] = PlayerDatas.Instance.baseData.LV; m_Json["job"] = PlayerDatas.Instance.baseData.Job.ToString(); m_Json["money"] = PlayerDatas.Instance.baseData.diamond.ToString(); m_Json["gameName"] = VersionConfig.Get().productName; m_Json["vipLevel"] = PlayerDatas.Instance.baseData.VIPLv.ToString(); m_Json["levelUpTime"] = TimeUtility.AllSeconds.ToString(); m_Json["createTime"] = TimeUtility.CreateSeconds.ToString(); m_Json["familyID"] = PlayerDatas.Instance.baseData.FamilyId.ToString(); m_Json["fightPower"] = PlayerDatas.Instance.baseData.FightPower.ToString(); SendMessageToSDK(m_Json); } public void RoleLoginOut() { if (PlayerDatas.Instance.PlayerId == 0) return; if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin) return; if (VersionConfig.Get().appId == "ryzj") { SendGaoreEvent(5); return; } m_Json.Clear(); m_Json["code"] = CodeU2A.RoleLoginOut; m_Json["roleID"] = PlayerDatas.Instance.PlayerId.ToString(); m_Json["roleName"] = PlayerDatas.Instance.baseData.PlayerName; m_Json["sid"] = ServerListCenter.Instance.currentServer.region_flag; m_Json["serverName"] = ServerListCenter.Instance.currentServer.name; m_Json["familyName"] = PlayerDatas.Instance.baseData.FamilyName; m_Json["level"] = PlayerDatas.Instance.baseData.LV; m_Json["job"] = PlayerDatas.Instance.baseData.Job.ToString(); m_Json["money"] = PlayerDatas.Instance.baseData.diamond.ToString(); m_Json["gameName"] = VersionConfig.Get().productName; m_Json["vipLevel"] = PlayerDatas.Instance.baseData.VIPLv.ToString(); m_Json["levelUpTime"] = TimeUtility.AllSeconds.ToString(); m_Json["createTime"] = TimeUtility.CreateSeconds.ToString(); m_Json["familyID"] = PlayerDatas.Instance.baseData.FamilyId.ToString(); m_Json["fightPower"] = PlayerDatas.Instance.baseData.FightPower.ToString(); SendMessageToSDK(m_Json); } #endregion #region 广告 //type为0立即播放视频,1为预加载 public void PlayAds(string adid) { m_Json.Clear(); m_Json["code"] = CodeU2A.PlayAds; m_Json["adid"] = adid; m_Json["type"] = 0; SendMessageToSDK(m_Json); } //打开带广告的界面 提前加载 public void LoadAds(string adid) { m_Json.Clear(); m_Json["code"] = CodeU2A.PlayAds; m_Json["adid"] = adid; m_Json["type"] = 1; SendMessageToSDK(m_Json); } #endregion }