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
|
|||
|
}
|
|||
|
}
|