using UnityEngine; //using UnityEngine.UI; using System.Collections; using System.Runtime.InteropServices; using System.Collections.Generic; public class Tracking: MonoBehaviour { private static Tracking _instance = null; public static Tracking Instance { get { if (!_instance) { _instance = GameObject.FindObjectOfType (typeof(Tracking)) as Tracking; if (!_instance) { GameObject am = new GameObject ("Tracking"); _instance = am.AddComponent (typeof(Tracking)) as Tracking; } } return _instance; } } void Awake () { DontDestroyOnLoad (this); } #if UNITY_IOS [DllImport ("__Internal")] private static extern void _internalInitWithAppKeyAndChannel_Tracking (string appKey, string channelId); [DllImport ("__Internal")] private static extern void _internalSetRegisterWithAccountID_Tracking (string account); [DllImport ("__Internal")] private static extern void _internalSetLoginWithAccountID_Tracking (string account); [DllImport ("__Internal")] private static extern void _internalSetRyzfStart_Tracking (string transactionId, string ryzfType, string currencyType, float currencyAmount); [DllImport ("__Internal")] private static extern void _internalSetRyzf_Tracking (string transactionId, string ryzfType, string currencyType, float currencyAmount); [DllImport ("__Internal")] private static extern void _internalSetOrder_Tracking (string transactionId, string currencyType, float currencyAmount); [DllImport ("__Internal")] private static extern void _internalSetEvent_Tracking (string EventName); [DllImport ("__Internal")] private static extern string _internalGetDeviceId_Tracking (); [DllImport ("__Internal")] private static extern void _internalSetPrintLog_Tracking (bool print); #endif #if UNITY_ANDROID public static AndroidJavaObject getApplicationContext () { using (AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic ("currentActivity")) { return jo.Call ("getApplicationContext"); } } return null; } #endif /// /// 初始化方法 /// /// appKey /// 标识推广渠道的字符 public void init (string appKey, string channelId) { #if UNITY_IOS _internalInitWithAppKeyAndChannel_Tracking (appKey, channelId); #endif #if UNITY_ANDROID using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { TrackingIO.CallStatic ("initWithKeyAndChannelId", getApplicationContext (), appKey, channelId); } #endif } /// /// 玩家服务器注册 /// /// 账号ID /// public void register (string account) { #if UNITY_IOS _internalSetRegisterWithAccountID_Tracking (account); #endif #if UNITY_ANDROID using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { TrackingIO.CallStatic ("setRegisterWithAccountID", account); } #endif } /// /// 玩家的账号登陆服务器 /// /// 账号 public void login (string account) { #if UNITY_IOS _internalSetLoginWithAccountID_Tracking (account); #endif #if UNITY_ANDROID using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { TrackingIO.CallStatic ("setLoginSuccessBusiness", account); } #endif } /// /// 玩家开始充值数据 /// /// 交易的流水号 /// 支付类型 /// 货币类型 /// 支付的真实货币的金额 public void setryzfStart (string transactionId, string ryzfType, string currencyType, float currencyAmount) { #if UNITY_IOS _internalSetRyzfStart_Tracking (transactionId, ryzfType, currencyType, currencyAmount); #endif #if UNITY_ANDROID using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { TrackingIO.CallStatic ("setPaymentStart", transactionId, ryzfType, currencyType, currencyAmount); } #endif } /// /// 玩家的充值数据 /// /// 交易的流水号 /// 支付类型 /// 货币类型 /// 支付的真实货币的金额 public void setryzf (string transactionId, string ryzfType, string currencyType, float currencyAmount) { #if UNITY_IOS _internalSetRyzf_Tracking (transactionId, ryzfType, currencyType, currencyAmount); #endif #if UNITY_ANDROID using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { TrackingIO.CallStatic ("setPayment", transactionId, ryzfType, currencyType, currencyAmount); } #endif } public void setOrder (string transactionId, string currencyType, float currencyAmount) { #if UNITY_IOS _internalSetOrder_Tracking (transactionId,currencyType,currencyAmount); #endif #if UNITY_ANDROID using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { TrackingIO.CallStatic ("setOrder", transactionId, currencyType, currencyAmount); } #endif } /// /// 统计玩家的自定义事件 /// /// 事件名 public void setEvent (string eventName) { #if UNITY_IOS _internalSetEvent_Tracking (eventName); #endif #if UNITY_ANDROID using (AndroidJavaClass reyun = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { reyun.CallStatic ("setEvent", eventName, null); } #endif } /// /// 获取用户的设备ID信息 /// public string getDeviceId () { #if UNITY_IOS return _internalGetDeviceId_Tracking (); #endif #if UNITY_ANDROID string str = "unknown"; using (AndroidJavaClass TrackingIO = new AndroidJavaClass ("com.reyun.tracking.sdk.Tracking")) { str = TrackingIO.CallStatic ("getDeviceId"); } return str; #endif return "unknown"; } /// 开启日志打印 public void setPrintLog (bool print) { #if UNITY_IOS _internalSetPrintLog_Tracking (print); #endif #if UNITY_ANDROID using (AndroidJavaClass reyunConst = new AndroidJavaClass ("com.reyun.tracking.common.ReYunConst")) { reyunConst.SetStatic ("DebugMode", print); } #endif } }