958 lines
36 KiB
C#
958 lines
36 KiB
C#
using Thousandto.CoreSDK.Event;
|
||
using UnityEngine;
|
||
using EventManager = UnityEngine.Gonbest.MagicCube.EventManager;
|
||
using JSONNode = UnityEngine.Gonbest.MagicCube.JSONNode;
|
||
using JSON = UnityEngine.Gonbest.MagicCube.JSON;
|
||
using JSONClass = UnityEngine.Gonbest.MagicCube.JSONClass;
|
||
using JSONData = UnityEngine.Gonbest.MagicCube.JSONData;
|
||
using UnityEngine.Gonbest.MagicCube;
|
||
using System.Collections.Generic;
|
||
|
||
namespace Thousandto.CoreSDK
|
||
{
|
||
/// <summary>
|
||
/// SDK功能类:通过请求类型与客户端进行交互,避免多个函数来回访问
|
||
/// SDK与客户端的交互主要通过三个函数来实现:
|
||
/// 1. CallFunc(调用Android的ClientToSDK函数)
|
||
/// 2. SetDatas(数据统计SDKStatistics.StatisticalEvent())
|
||
/// 3. Callback(SDK_Object接收Android发送过来的消息)
|
||
/// 以后要更新SDK,只需要更新枚举文件FuncellEnum,同时实现新增枚举对应方法,android端不用改动
|
||
/// </summary>
|
||
public abstract class FuncellSDK
|
||
{
|
||
//sdk初始化是否完成
|
||
#if UNITY_IPHONE
|
||
public bool SDKInitFinish = false;
|
||
#else
|
||
public bool SDKInitFinish = false;
|
||
#endif
|
||
//是否使用sdk
|
||
public bool UseSDK = false;
|
||
|
||
private bool _isCommitToAppstore = false;
|
||
|
||
public string PlatformId = "";
|
||
|
||
private static FuncellSDK _instance;
|
||
|
||
public FuncellSDK()
|
||
{
|
||
}
|
||
|
||
public static FuncellSDK Instance
|
||
{
|
||
get
|
||
{
|
||
if(_instance == null)
|
||
{
|
||
#if UNITY_EDITOR
|
||
_instance = new FuncellSDKDefault();
|
||
#elif UNITY_ANDROID
|
||
_instance = new FuncellSDKAndroid();
|
||
#elif UNITY_IPHONE
|
||
_instance = new FuncellSDKIOS();
|
||
#elif UNITY_STANDALONE_WIN
|
||
_instance = new FuncellSDKPC();
|
||
#else
|
||
_instance = new FuncellSDKDefault();
|
||
#endif
|
||
}
|
||
//注册客户端添加蓝钻的回调
|
||
EventManager.SharedInstance.RegFixEventHandle(SDKEventDefine.SDK_ENENT_ADD_GOLD_CALLBACK, _instance.OnRechargeSuccess);
|
||
return _instance;
|
||
}
|
||
}
|
||
|
||
|
||
#region 抽象函数,需要实现
|
||
//调用sdk的方法
|
||
protected abstract void CallFunc(RequestOptType funcType, params string[] args);
|
||
|
||
public void InstallApp(string pathOrUrl)
|
||
{
|
||
UnityEngine.Application.OpenURL(pathOrUrl);
|
||
}
|
||
|
||
public virtual void ReInitSDK()
|
||
{
|
||
|
||
}
|
||
|
||
public virtual bool IsMusicPlaying()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
public virtual void CopyToClipboard( string text )
|
||
{
|
||
|
||
}
|
||
|
||
//取相片或拍照
|
||
public virtual void GetPhoto(int type, string path, int width, int height)
|
||
{
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断当前手机是否是全面屏
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public virtual bool HasNotchInScreen()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否实名制了
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public virtual bool IsRealNameAuthorized()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 调用SDK的实名制界面
|
||
/// </summary>
|
||
public virtual void DoRealNameAuthority(string name, string idcard)
|
||
{
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取当前网络类型
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public virtual string GetNetworkType()
|
||
{
|
||
return null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重启App
|
||
/// </summary>
|
||
public virtual void ReStartGame()
|
||
{
|
||
|
||
}
|
||
|
||
public virtual Dictionary<string, string> GetPCParams()
|
||
{
|
||
return new Dictionary<string, string>();
|
||
}
|
||
#endregion
|
||
|
||
#region 登陆、登出、切换账号、支付、退出、个人中心
|
||
/// <summary>
|
||
/// 显示个人中心
|
||
/// </summary>
|
||
public void ShowAccountCenter()
|
||
{
|
||
CallFunc(RequestOptType.ReqShowAccountCenter);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 调用sdk的登陆接口
|
||
/// </summary>
|
||
public void SDKLogin()
|
||
{
|
||
Debug.LogError("SDKLogin......");
|
||
CallFunc(RequestOptType.ReqLogin);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 登出sdk账号
|
||
/// </summary>
|
||
public void SDKLogout()
|
||
{
|
||
CallFunc(RequestOptType.ReqLogout);
|
||
}
|
||
|
||
public void SwitchAccount()
|
||
{
|
||
CallFunc(RequestOptType.ReqSwitchLogin);
|
||
}
|
||
|
||
private void DoExitGame()
|
||
{
|
||
CallFunc(RequestOptType.ReqExit);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 调用sdk的退出游戏接口,有些sdk有自己的退出界面
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public bool ExitGame()
|
||
{
|
||
if (!UseSDK)
|
||
{
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_EXIT_CALL, null);
|
||
return true;
|
||
}
|
||
DoExitGame();
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// sdk的支付接口
|
||
/// </summary>
|
||
/// <param name="itemId"></param>
|
||
/// <param name="itemName"></param>
|
||
/// <param name="type"></param>
|
||
/// <param name="num"></param>
|
||
/// <param name="price"></param>
|
||
/// <param name="extData"></param>
|
||
public void Pay(string itemId, string itemName, int buyNum, float price, string goodsDealType, string payNotifyUrl, string rechargeType, string extension, int cfgId, string orderNo)
|
||
{
|
||
SDKCacheData.ItemType = rechargeType;
|
||
SDKCacheData.ItemId = itemId;
|
||
SDKCacheData.ItemName = itemName;
|
||
SDKCacheData.BuyNum = buyNum.ToString();
|
||
SDKCacheData.ItemPrice = price.ToString();
|
||
SDKCacheData.ItemDes = SDKCacheData.ItemName;
|
||
SDKCacheData.PayCfgId = cfgId.ToString();
|
||
SDKCacheData.GoodsDealType = goodsDealType;
|
||
SDKCacheData.PayNotifyUrl = payNotifyUrl;
|
||
SDKCacheData.OrderNo = orderNo;
|
||
if ( !string.IsNullOrEmpty(extension) )
|
||
{
|
||
SDKCacheData.Extension = extension;
|
||
}
|
||
DoPay();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 请求支付
|
||
/// </summary>
|
||
/// <param name="arg1">对应android端FuncellRoleInfo类,以方法名_值的格式构造json数据</param>
|
||
/// <param name="arg2">对应android端FuncellPayParams类,以方法名_值的格式构造json数据</param>
|
||
public void DoPay()
|
||
{
|
||
JSONClass payData = new JSONClass();
|
||
// 角色信息
|
||
payData.Add( "roleId", new JSONData( SDKCacheData.RoleID ) );
|
||
payData.Add( "roleName", new JSONData( SDKCacheData.RoleName ) );
|
||
payData.Add( "roleLevel", new JSONData( SDKCacheData.RoleLevel ) );
|
||
payData.Add( "vip", new JSONData( SDKCacheData.RoleRealmLv ) );
|
||
payData.Add( "coinNum", new JSONData( SDKCacheData.RoleGoldBalance ) );
|
||
|
||
// 服务器信息
|
||
payData.Add( "serverId", new JSONData( SDKCacheData.ServerID ) );
|
||
payData.Add( "serverName", new JSONData( SDKCacheData.ServerName ) );
|
||
|
||
// 购买信息
|
||
payData.Add( "buyNum", new JSONData( SDKCacheData.BuyNum ) );
|
||
payData.Add( "price", new JSONData( SDKCacheData.ItemPrice ) );
|
||
payData.Add( "productId", new JSONData( SDKCacheData.ItemId ) );
|
||
payData.Add( "productDesc", new JSONData( SDKCacheData.ItemName ) );
|
||
payData.Add( "productName", new JSONData( SDKCacheData.ItemName ) );
|
||
// 配置表的ID
|
||
payData.Add( "productCode", new JSONData( SDKCacheData.PayCfgId));
|
||
// 发货地址
|
||
payData.Add( "payNotifyUrl", new JSONData(SDKCacheData.PayNotifyUrl));
|
||
//给SDK的充值类型
|
||
payData.Add( "goodsDealType", new JSONData( SDKCacheData.GoodsDealType));
|
||
|
||
// 其它参数
|
||
payData.Add( "extension", new JSONData( SDKCacheData.Extension ) );
|
||
payData.Add( "orderno", new JSONData( SDKCacheData.OrderNo) );
|
||
CallFunc( RequestOptType.ReqPay, payData.ToString() );
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 数据统计: 创建账号、创建角色、服务器信息、登陆信息、角色升级、充值
|
||
public void EventCreatRole()
|
||
{
|
||
JSONClass jn = new JSONClass();
|
||
jn.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
jn.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
jn.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
jn.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
jn.Add("server_name", new JSONData(SDKCacheData.ServerName));
|
||
jn.Add("role_gamegold_balance", new JSONData(SDKCacheData.RoleGoldBalance));
|
||
jn.Add("role_gameunion_name", new JSONData(SDKCacheData.RoleGuidName));
|
||
jn.Add("role_vip_level", new JSONData(SDKCacheData.RoleVipLevel));
|
||
jn.Add("role_creat_time", new JSONData(SDKCacheData.RoleCreateTime));
|
||
jn.Add("role_upgrade_time", new JSONData(SDKCacheData.RoleCreateTime));
|
||
jn.Add("role_recharge_balance", new JSONData(SDKCacheData.RoleRechargeBalance));
|
||
jn.Add("gameVersion", new JSONData(SDKCacheData.AppVersion));
|
||
jn.Add("roleCombat", new JSONData(SDKCacheData.FightPower));
|
||
jn.Add("roleSex", new JSONData(SDKCacheData.RoleSex));
|
||
jn.Add("mapId", new JSONData(SDKCacheData.MapId));
|
||
jn.Add("loginType", new JSONData(SDKCacheData.LoginType));
|
||
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_CREATE_ROLE, jn.ToString());
|
||
}
|
||
|
||
public void EventServerInfo()
|
||
{
|
||
JSONClass jn = new JSONClass();
|
||
jn.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
jn.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
jn.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
jn.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
jn.Add("server_name", new JSONData(SDKCacheData.ServerName));
|
||
jn.Add("role_gamegold_balance", new JSONData(SDKCacheData.RoleGoldBalance));
|
||
jn.Add("role_gameunion_name", new JSONData(SDKCacheData.RoleGuidName));
|
||
jn.Add("role_vip_level", new JSONData(SDKCacheData.RoleVipLevel));
|
||
jn.Add("role_creat_time", new JSONData(SDKCacheData.RoleCreateTime));
|
||
jn.Add("role_upgrade_time", new JSONData(SDKCacheData.RoleLevelUpTime));
|
||
jn.Add("role_recharge_balance", new JSONData(SDKCacheData.RoleRechargeBalance));
|
||
jn.Add("gameVersion", new JSONData(SDKCacheData.AppVersion));
|
||
jn.Add("roleCombat", new JSONData(SDKCacheData.FightPower));
|
||
jn.Add("roleSex", new JSONData(SDKCacheData.RoleSex));
|
||
jn.Add("mapId", new JSONData(SDKCacheData.MapId));
|
||
jn.Add("loginType", new JSONData(SDKCacheData.LoginType));
|
||
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_ENTER_GAME, jn.ToString());
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_SERVER_ROLE_INFO, jn.ToString());
|
||
// 统计
|
||
DealMessage((int)PLATFORM_DEAL_TYPE.PDT_WEBTOTAL, "Statistic");
|
||
//进入游戏
|
||
DealMessage((int)PLATFORM_DEAL_TYPE.PDT_TOTAL_ENTERGAME, "enterGame");
|
||
}
|
||
|
||
public void EventLogin()
|
||
{
|
||
JSONClass jn = new JSONClass();
|
||
jn.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_LOGIN, jn.ToString());
|
||
}
|
||
|
||
//退出游戏的统计
|
||
public void EventExit()
|
||
{
|
||
JSONClass jn = new JSONClass();
|
||
jn.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
jn.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
jn.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
jn.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
jn.Add("server_name", new JSONData(SDKCacheData.ServerName));
|
||
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_EXIT_GAME, jn.ToString());
|
||
}
|
||
|
||
public void EventLevelUp()
|
||
{
|
||
JSONClass jn = new JSONClass();
|
||
jn.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
jn.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
jn.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
jn.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
jn.Add("server_name", new JSONData(SDKCacheData.ServerName));
|
||
jn.Add("role_gamegold_balance", new JSONData(SDKCacheData.RoleGoldBalance));
|
||
jn.Add("role_gameunion_name", new JSONData(SDKCacheData.RoleGuidName));
|
||
jn.Add("role_vip_level", new JSONData(SDKCacheData.RoleVipLevel));
|
||
jn.Add("role_creat_time", new JSONData(SDKCacheData.RoleCreateTime));
|
||
jn.Add("role_upgrade_time", new JSONData(SDKCacheData.RoleLevelUpTime));
|
||
jn.Add("role_recharge_balance", new JSONData(SDKCacheData.RoleRechargeBalance));
|
||
jn.Add("gameVersion", new JSONData(SDKCacheData.AppVersion));
|
||
jn.Add("roleCombat", new JSONData(SDKCacheData.FightPower));
|
||
jn.Add("roleSex", new JSONData(SDKCacheData.RoleSex));
|
||
jn.Add("mapId", new JSONData(SDKCacheData.MapId));
|
||
jn.Add("loginType", new JSONData(SDKCacheData.LoginType));
|
||
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_ROLE_LEVELUP, jn.ToString());
|
||
|
||
int playerLv = 1;
|
||
if (int.TryParse(SDKCacheData.RoleLevel, out playerLv))
|
||
{
|
||
//[特殊统计]
|
||
//215级算是中度活跃用户
|
||
if (playerLv == 215)
|
||
{
|
||
JSONClass jnCustom = new JSONClass();
|
||
jnCustom.Add("custom_level_215", new JSONData(SDKCacheData.RoleLevel));
|
||
jnCustom.Add("custom_event", new JSONData("custom_level_215"));
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.CUSTOM_EVENT, jnCustom.ToString());
|
||
}
|
||
//[特殊统计]
|
||
//245级算是高度活跃用户
|
||
else if (playerLv == 245)
|
||
{
|
||
JSONClass jnCustom = new JSONClass();
|
||
jnCustom.Add("custom_level_245", new JSONData(SDKCacheData.RoleLevel));
|
||
jnCustom.Add("custom_event", new JSONData("custom_level_245"));
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.CUSTOM_EVENT, jnCustom.ToString());
|
||
}
|
||
}
|
||
}
|
||
|
||
//[特殊统计]统计100万战力
|
||
public void EventFightPower()
|
||
{
|
||
JSONClass jnCustom = new JSONClass();
|
||
jnCustom.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
jnCustom.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
jnCustom.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
jnCustom.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
jnCustom.Add("roleCombat", new JSONData(SDKCacheData.FightPower));
|
||
jnCustom.Add("custom_power_1000000", new JSONData(SDKCacheData.FightPower));
|
||
jnCustom.Add("custom_event", new JSONData("custom_power_1000000"));
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.CUSTOM_EVENT, jnCustom.ToString());
|
||
}
|
||
|
||
//[特殊统计]统计月卡和周卡的购买
|
||
public void EventWMCard(WeekMonthCard cardType)
|
||
{
|
||
JSONClass jnCustom = new JSONClass();
|
||
jnCustom.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
jnCustom.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
jnCustom.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
jnCustom.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
jnCustom.Add("roleCombat", new JSONData(SDKCacheData.FightPower));
|
||
switch (cardType)
|
||
{
|
||
case WeekMonthCard.CARD_WEEK:
|
||
jnCustom.Add("custom_weekcard", new JSONData(WeekMonthCard.CARD_WEEK.ToString()));
|
||
jnCustom.Add("custom_event", new JSONData("custom_weekcard"));
|
||
break;
|
||
case WeekMonthCard.CARD_MONTH:
|
||
jnCustom.Add("custom_monthcard", new JSONData(WeekMonthCard.CARD_MONTH.ToString()));
|
||
jnCustom.Add("custom_event", new JSONData("custom_monthcard"));
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.CUSTOM_EVENT, jnCustom.ToString());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 真正的充值成功回调,这里逻辑是这样的
|
||
/// 1. SDK充值成功之后通知游戏
|
||
/// 2. 游戏收到通知之后向服务器请求加元宝
|
||
/// 3. 服务器通知客户端元宝添加成功
|
||
/// 这里处于第3步的操作,相当于走完了整个的充值流程,可以统计真正完成的交易有多少了
|
||
/// </summary>
|
||
private void OnRechargeSuccess(object obj,object sender)
|
||
{
|
||
string payCallbackJson = string.Empty;
|
||
try
|
||
{
|
||
JSONClass arg1Json = new JSONClass();
|
||
arg1Json.Add("serverno", new JSONData(SDKCacheData.ServerID));
|
||
arg1Json.Add("role_level", new JSONData(SDKCacheData.RoleLevel));
|
||
arg1Json.Add("role_id", new JSONData(SDKCacheData.RoleID));
|
||
arg1Json.Add("role_name", new JSONData(SDKCacheData.RoleName));
|
||
arg1Json.Add("server_name", new JSONData(SDKCacheData.ServerName));
|
||
arg1Json.Add("role_gamegold_balance", new JSONData(SDKCacheData.RoleGoldBalance));
|
||
arg1Json.Add("role_gameunion_name", new JSONData(SDKCacheData.RoleGuidName));
|
||
arg1Json.Add("role_vip_level", new JSONData(SDKCacheData.RoleVipLevel));
|
||
arg1Json.Add("role_creat_time", new JSONData(SDKCacheData.RoleCreateTime));
|
||
arg1Json.Add("role_upgrade_time", new JSONData(SDKCacheData.RoleLevelUpTime));
|
||
arg1Json.Add("role_recharge_balance", new JSONData(SDKCacheData.RoleRechargeBalance));
|
||
arg1Json.Add("gameVersion", new JSONData(SDKCacheData.AppVersion));
|
||
arg1Json.Add("roleCombat", new JSONData(SDKCacheData.FightPower));
|
||
arg1Json.Add("roleSex", new JSONData(SDKCacheData.RoleSex));
|
||
arg1Json.Add("mapId", new JSONData(SDKCacheData.MapId));
|
||
arg1Json.Add("loginType", new JSONData(SDKCacheData.LoginType));
|
||
payCallbackJson = arg1Json.ToString();
|
||
UnityEngine.Debug.LogError("pay callback :" + payCallbackJson);
|
||
//统一的统计接口,这里做充值的统计
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_RECHARGE, payCallbackJson);
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
UnityEngine.Debug.LogException(ex);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region SDK到客户端的回调
|
||
/// <summary>
|
||
/// SDK_Object用来接收Android发送过来的消息
|
||
/// </summary>
|
||
/// <param name="result"></param>
|
||
public void Callback(string result)
|
||
{
|
||
//方法类型
|
||
int index = result.IndexOf('_');
|
||
string funcTypeStr = result.Substring(0, index);
|
||
result = result.Substring(index + 1);
|
||
|
||
//回调结果 0成功 1失败 2取消
|
||
index = result.IndexOf('_');
|
||
string resultCodeStr = result.Substring(0, index);
|
||
result = result.Substring(index + 1);
|
||
|
||
string jsonResult = result;
|
||
CallbackType type;
|
||
if (ParseEnum(funcTypeStr, out type))
|
||
{
|
||
ResultCode resultCode = ResultCode.Unknown;
|
||
ParseEnum(resultCodeStr, out resultCode);
|
||
|
||
UnityEngine.Debug.Log(string.Format("SDK callback : type={2} code {0} json={1}", resultCode, jsonResult, type));
|
||
|
||
switch (type)
|
||
{
|
||
case CallbackType.InitCallback:
|
||
OnSDKInitCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.LoginCallback:
|
||
OnLoginCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.LogoutCallback:
|
||
OnLogoutCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.SwitchAccountCallback:
|
||
OnSwitchAccountCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.ExitCallback:
|
||
OnExitCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.PayCallback:
|
||
OnPayCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.ServersUrlCallback:
|
||
OnServersUrlCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.NoticeCallback:
|
||
OnNoticeCallback(resultCode, jsonResult);
|
||
break;
|
||
case CallbackType.RealNameCallback:
|
||
OnRealNameCallback(resultCode, jsonResult);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
//设置SDK语言
|
||
public void SetSDKLan(string lan = "")
|
||
{
|
||
if(string.IsNullOrEmpty(lan))
|
||
lan = UnityEngine.Gonbest.MagicCube.FLanguage.Default;
|
||
|
||
int type = 1;
|
||
JSONClass jn = new JSONClass();
|
||
//1.简体,2繁体 3.英文,4.泰文,5越语 6 韩文
|
||
switch(lan)
|
||
{
|
||
case "CH":
|
||
type = 1;
|
||
break;
|
||
case "TW":
|
||
type = 2;
|
||
break;
|
||
case "EN":
|
||
type = 3;
|
||
break;
|
||
case "TH":
|
||
type = 4;
|
||
break;
|
||
case "VIE":
|
||
type = 5;
|
||
break;
|
||
case "KR":
|
||
type = 6;
|
||
break;
|
||
case "EN2":
|
||
type = 3;
|
||
break;
|
||
case "CH2":
|
||
type = 1;
|
||
break;
|
||
}
|
||
jn.Add("type", new JSONData("" + type));
|
||
}
|
||
|
||
private bool ParseEnum<T>(string item, out T outT)
|
||
{
|
||
outT = default(T);
|
||
if (System.Enum.IsDefined(typeof(T), item))
|
||
{
|
||
outT = (T)System.Enum.Parse(typeof(T), item);
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
public void OnLoginCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
if (resultCode != ResultCode.Success)
|
||
{
|
||
UnityEngine.Debug.LogError("OnLoginCallback: fail code=" + resultCode);
|
||
}
|
||
else
|
||
{
|
||
//type=LoginCallback code Success json=
|
||
//{ "username":"sy804753",
|
||
// "userID":119,
|
||
// "cpUserID":"sy804753",
|
||
// "cpUserName":"",
|
||
// "token":"6354b2b1dc612efec0acc422710f9e83",
|
||
// "appID":51,
|
||
// "channelID":168
|
||
//}
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_LOGIN_SUCCESS, jsonResult);
|
||
|
||
JSONNode jn = JSONNode.Parse(jsonResult);
|
||
SDKCacheData.UserID = jn["userID"];
|
||
SDKCacheData.UserName = jn["username"];
|
||
|
||
//统一的统计接口,登陆统计
|
||
SDKStatistics.Instance.StatisticalEvent(DataTypes.DATA_LOGIN, jn.ToString());
|
||
}
|
||
}
|
||
|
||
public void OnSDKInitCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
if (string.IsNullOrEmpty(jsonResult))
|
||
{
|
||
UnityEngine.Debug.LogError("SDK init error; jsonResult is empty!!");
|
||
return;
|
||
}
|
||
|
||
UnityEngine.Debug.Log("SDK init result: " + resultCode);
|
||
|
||
|
||
if (resultCode == ResultCode.Success)
|
||
{
|
||
SDKInitFinish = true;
|
||
JSONNode node = JSON.Parse(jsonResult);
|
||
SDKCacheData.ServerUrl = node["url"].Value;
|
||
SDKCacheData.SecID = node["secId"].Value;
|
||
SDKCacheData.SourceId = node["sourceId"].Value;
|
||
SDKCacheData.DevicesId = node["deviceId"].Value;
|
||
SDKCacheData.CPExtData = node["cpExtJson"].Value;
|
||
string cpExtJson = node["cpExtJson"].Value;
|
||
if (!string.IsNullOrEmpty(cpExtJson))
|
||
{
|
||
Debug.Log("OnSDKInitCallback cpExtJson:" + cpExtJson);
|
||
try
|
||
{
|
||
JSONNode cpDataJson = JSON.Parse(cpExtJson);
|
||
//SDK获取的平台ID
|
||
SDKCacheData.CPPlatformId = cpDataJson["fnpidraw"].Value;
|
||
//游戏平台简称
|
||
SDKCacheData.CPPlatformGname = cpDataJson["fnptag"].Value;
|
||
//游戏简称
|
||
SDKCacheData.CPGameName = cpDataJson["fnptagraw"].Value;
|
||
//用户设备ID,Android系统取IMEI码;iOS6.0以前系统取设备号,iOS6.0及以后的系统取广告标示符(IDFA -Identifier For Advertising), PC可以采用mac地址。请注意不要用MD5加密did字段
|
||
SDKCacheData.CPDid = cpDataJson["deviceId"].Value;
|
||
//cpdevice_name
|
||
SDKCacheData.CPDevice_name = cpDataJson["deviceName"].Value;
|
||
//SDK获取的gameID
|
||
SDKCacheData.CPGameId = cpDataJson["fngid"].Value;
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
Debug.Log(ex.Message);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public void OnLogoutCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
if (resultCode != ResultCode.Success)
|
||
{
|
||
UnityEngine.Debug.LogError("OnLogoutCallback: fail code=" + resultCode);
|
||
}
|
||
else
|
||
{
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_LOGIN_LOGOUT_ACCOUNT, jsonResult);
|
||
}
|
||
}
|
||
|
||
public void OnSwitchAccountCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
if (resultCode != ResultCode.Success)
|
||
{
|
||
UnityEngine.Debug.LogError("SwitchAccountCallback: fail code=" + resultCode);
|
||
}
|
||
else
|
||
{
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_LOGIN_SWITCH_ACCOUNT, jsonResult);
|
||
}
|
||
}
|
||
|
||
private void OnExitCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_EXIT_CALL, jsonResult);
|
||
}
|
||
|
||
public void OnPayCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
if (resultCode != ResultCode.Fail || resultCode != ResultCode.Cancel)
|
||
{
|
||
//TODO 充值成功的统计
|
||
}
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_PAY_CALLBACK, jsonResult);
|
||
}
|
||
|
||
public void OnServersUrlCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
UnityEngine.Debug.Log("OnServersUrlCallback: " + jsonResult);
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_SERVERS_LOADED, jsonResult);
|
||
}
|
||
|
||
public void OnNoticeCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
UnityEngine.Debug.Log("OnNoticeCallback: " + jsonResult);
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_NOTICE, jsonResult);
|
||
}
|
||
|
||
public void OnRealNameCallback(ResultCode resultCode, string jsonResult)
|
||
{
|
||
UnityEngine.Debug.Log("OnRealNameCallback: " + jsonResult);
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CALLBACK_REALNAME_RESULT, jsonResult);
|
||
}
|
||
|
||
//图片裁剪回调
|
||
public void OnClipImgCallback(string args)
|
||
{
|
||
if (!string.IsNullOrEmpty(args))
|
||
{
|
||
var startIndex = args.IndexOf(';');
|
||
string filePath = args.Substring(0, startIndex);
|
||
string bytesBase64 = args.Substring(startIndex + 1);
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_CLIP_IMG_CALLBACK, filePath, bytesBase64);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 设置需要缓存的数据
|
||
/// <summary>
|
||
/// 获取渠道名字
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string GetPlatformName()
|
||
{
|
||
return SDKBridge.GetPlatformName();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置sdk需要的角色信息
|
||
/// </summary>
|
||
public void SetRoleInfo(string name, string roleID, string occ, long power, long gold, int level, int roleSex, int mapId, string appVersion, long roleCreateTime = 0)
|
||
{
|
||
SDKCacheData.RoleName = name;
|
||
SDKCacheData.RoleID = roleID;
|
||
SDKCacheData.RoleLevel = level.ToString();
|
||
SDKCacheData.RoleGoldBalance = gold.ToString();
|
||
SDKCacheData.RoleCreateTime = roleCreateTime.ToString();
|
||
SDKCacheData.FightPower = power.ToString();
|
||
SDKCacheData.RoleSex = roleSex.ToString();
|
||
SDKCacheData.MapId = mapId.ToString();
|
||
SDKCacheData.AppVersion = appVersion.ToString();
|
||
}
|
||
|
||
/// <summary>
|
||
///初始化角色等级信息,当第一次进入游戏主场景时
|
||
/// </summary>
|
||
/// <param name="level"></param>
|
||
public void SetLevelInfoWhileFirstEnterGame(int level)
|
||
{
|
||
#if UNITY_IPHONE && !UNITY_EDITOR
|
||
FuncellSDKIOS.DealMessage(PLATFORM_DEAL_TYPE.PDT_LEVEL_CHANGE, "#" + level);
|
||
#endif
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置角色元宝余额
|
||
/// </summary>
|
||
/// <param name="balance"></param>
|
||
public void SetGoldBalance(int balance)
|
||
{
|
||
SDKCacheData.RoleGoldBalance = "" + balance;
|
||
}
|
||
|
||
/// <summary>
|
||
///设置公会信息
|
||
/// </summary>
|
||
/// <param name="name"></param>
|
||
public void SetGuildName(string name)
|
||
{
|
||
SDKCacheData.RoleGuidName = name;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置服务器信息,选择服务器的时候就设置了
|
||
/// </summary>
|
||
/// <param name="serverId"></param>
|
||
/// <param name="serverName"></param>
|
||
public void SetServerInfo(string serverId, string serverName)
|
||
{
|
||
SDKCacheData.ServerID = serverId;
|
||
SDKCacheData.ServerName = serverName;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 处理sdk的消息
|
||
/// </summary>
|
||
/// <param name="msgID"></param>
|
||
public void DealMessage(int msgID, string arg = "")
|
||
{
|
||
if (System.Enum.IsDefined(typeof(PLATFORM_DEAL_TYPE), msgID))
|
||
{
|
||
#if UNITY_IPHONE && !UNITY_EDITOR
|
||
FuncellSDKIOS.DealMessage((PLATFORM_DEAL_TYPE)msgID, arg);
|
||
#endif
|
||
}
|
||
else
|
||
UnityEngine.Debug.LogWarning("Did not define the message id in PlatformInterface: msgId=" + msgID);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 角色等级变化时调用
|
||
/// </summary>
|
||
/// <param name="level"></param>
|
||
public void OnLevelChange(int level)
|
||
{
|
||
SDKCacheData.RoleLevel = "" + level;
|
||
|
||
#if UNITY_IPHONE && !UNITY_EDITOR
|
||
FuncellSDKIOS.DealMessage(PLATFORM_DEAL_TYPE.PDT_LEVEL_CHANGE, "" + level);
|
||
#endif
|
||
}
|
||
|
||
//角色升级
|
||
public void SetRoleLevelupTime(long levelupTime)
|
||
{
|
||
SDKCacheData.RoleLevelUpTime = "" + levelupTime;
|
||
}
|
||
|
||
public void SendEventServerInfo()
|
||
{
|
||
EventServerInfo();
|
||
}
|
||
|
||
public void SendEventLogin()
|
||
{
|
||
EventLogin();
|
||
}
|
||
|
||
public void SendEventLevelUp()
|
||
{
|
||
EventLevelUp();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 任务完成的统计
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
/// <param name="taskType">任务类型,main, branch</param>
|
||
public void SendEventTaskFinsh(int taskId, string taskType)
|
||
{
|
||
|
||
}
|
||
|
||
public void SendEventCreatRole()
|
||
{
|
||
EventCreatRole();
|
||
}
|
||
|
||
//sdk是否初始化完成了,如果不使用sdk,总是返回true
|
||
public bool IsSDKInitFinish()
|
||
{
|
||
if (UseSDK)
|
||
return SDKInitFinish;
|
||
|
||
return true;
|
||
}
|
||
|
||
public virtual bool IsEmulator()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 服务器列表的域名
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string GetServerUrl()
|
||
{
|
||
/**如果是空的,那么走cc环境
|
||
* 这里需要注意下,打包之后接了渠道包,这里肯定不会是空的,一般是PC下为空
|
||
* 2020/3/5 by dinghuaqiang
|
||
*/
|
||
if (string.IsNullOrEmpty(SDKCacheData.ServerUrl))
|
||
{
|
||
return SDKCacheData.ServerUrl = SDKCacheData.DefaultURL;
|
||
}
|
||
return SDKCacheData.ServerUrl;
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 其他公共函数
|
||
|
||
/// <summary>
|
||
/// SDK的分享,主要针对于Facebook分享
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
public virtual void DoShare(string url)
|
||
{
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 前往市场对App评分
|
||
/// </summary>
|
||
public virtual void DoRate(string appStoreUrl)
|
||
{
|
||
UnityEngine.Debug.Log("CommitToAppStore:" + appStoreUrl);
|
||
_isCommitToAppstore = true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 打开某个链接
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
public void OpenUrl(string url)
|
||
{
|
||
if (!string.IsNullOrEmpty(url))
|
||
{
|
||
Application.OpenURL(url);
|
||
}
|
||
}
|
||
|
||
public void OnApplicationResume()
|
||
{
|
||
if(_isCommitToAppstore)
|
||
{
|
||
_isCommitToAppstore = false;
|
||
|
||
//通知评论完成
|
||
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_COMMIT_TO_APPSTORE);
|
||
}
|
||
}
|
||
|
||
|
||
//打开商店评论
|
||
public void CommitToAppStore(string appStoreUrl)
|
||
{
|
||
UnityEngine.Debug.Log("CommitToAppStore:" + appStoreUrl);
|
||
_isCommitToAppstore = true;
|
||
//android需要调用Intent
|
||
#if UNITY_ANDROID
|
||
if (appStoreUrl.StartsWith("market://"))
|
||
{
|
||
appStoreUrl = "market://details?id=" + Application.identifier;
|
||
}
|
||
#endif
|
||
//ios直接打开url
|
||
Application.OpenURL(appStoreUrl);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取广告标记
|
||
/// Android: google gaid
|
||
/// IOS: idfa
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public virtual string GetADID()
|
||
{
|
||
return "";
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|