307 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			307 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections; | |||
|  | using System.Collections.Generic; | |||
|  | using UnityEngine; | |||
|  | using System.Runtime.InteropServices; | |||
|  | 
 | |||
|  | using Touka.GameLogic; | |||
|  | using Touka; | |||
|  | 
 | |||
|  | public class TGTools : TGSingleton<TGTools> | |||
|  | { | |||
|  |     public Action OnAndroidInitSucceed; | |||
|  | 
 | |||
|  |     public Action onRemoteConfigHandler; | |||
|  |     public Action onAgreeHander; | |||
|  |     private bool isInit = false; | |||
|  | #if UNITY_ANDROID && !UNITY_EDITOR | |||
|  |     protected static AndroidJavaObject Context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); | |||
|  | 
 | |||
|  | #endif | |||
|  |     void Awake() | |||
|  |     { | |||
|  | 
 | |||
|  |         if (this != Instance) | |||
|  |         { | |||
|  |             DontDestroyOnLoad(gameObject); | |||
|  |             return; | |||
|  |         } | |||
|  |         DontDestroyOnLoad(gameObject); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern void initUMOlineConfig(string appKey, string channel); | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern void setDefaults(string defaults); | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern void setDefaultsFromPlistFileName(string fileName); | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern string configValueForKey(string key); | |||
|  |     [DllImport("__Internal")] | |||
|  |     public static extern void remoteConfigActivatedCallback( | |||
|  |         IntPtr remoteConfig | |||
|  |     ); | |||
|  |      | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern void registerAPNS(); | |||
|  |      [DllImport("__Internal")] | |||
|  |     private static extern void registerNotification(string name, string text, string fireDate); | |||
|  |      [DllImport("__Internal")] | |||
|  |     private static extern void removeNotification(string nofiName); | |||
|  |      [DllImport("__Internal")] | |||
|  |     private static extern void removeAllNotification(); | |||
|  | 
 | |||
|  |     //应用内评价 | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern void showAppStoreReView(); | |||
|  | 
 | |||
|  | #if IOS_CN | |||
|  |     //用户协议弹框回调 | |||
|  |     [DllImport("__Internal")] | |||
|  |     public static extern void userAgreementAgreeCallback( | |||
|  |         IntPtr userAgree | |||
|  |     ); | |||
|  |     //用户协议弹框 | |||
|  |     [DllImport("__Internal")] | |||
|  |     private static extern void showUserAgreementView(string contentType,string ageType,string privacy,string termofservice); | |||
|  | #endif | |||
|  | #endif | |||
|  | 
 | |||
|  |     // 友盟在线参数 | |||
|  |     // 初始化,appkey 同友盟初始化key ,channel 一版填写 " app store " | |||
|  |     public void InitSdk(string appKey, string channel) | |||
|  |     { | |||
|  | 
 | |||
|  | 
 | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  |         //设置回调托管函数指针 | |||
|  |         remoteConfigActivated handler = new remoteConfigActivated(remoteConfigActivatedHandle); | |||
|  |         IntPtr remoteConfig = Marshal.GetFunctionPointerForDelegate(handler); | |||
|  |         //调用OC的方法,将C#的回调方法函数指针传给OC | |||
|  |         remoteConfigActivatedCallback(remoteConfig); | |||
|  | 
 | |||
|  |         initUMOlineConfig(appKey, channel); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  | } | |||
|  | 
 | |||
|  | // 设置默认值,传入json 字符串  (可不设置,不设置默认值时,取不到远端值时,返回空字符串) | |||
|  | public void SetDefaults(string defaults) | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  | 
 | |||
|  |         setDefaults(defaults); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     // 通过 plist 文件设置默认值,需 plist 文件导出至xcode工程里,这个参数是 plist 文件名称  (可不设置,不设置默认值时,取不到远端值时,返回空字符串) | |||
|  |     public void SetDefaultWithFileName(string fileName) | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  | 
 | |||
|  |         setDefaultsFromPlistFileName(fileName); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     // 通过 key 去取 在线参数 | |||
|  |     public string ConfigValueForKey(string key) | |||
|  |     { | |||
|  | #if UNITY_EDITOR || NO_SDK | |||
|  | 
 | |||
|  |         return ""; | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID && ANDROID_TW | |||
|  |         return configValueForKeyAndroid(key); | |||
|  | 
 | |||
|  | #elif UNITY_IPHONE | |||
|  |         return configValueForKey(key); | |||
|  |     | |||
|  | #endif | |||
|  |         return ""; | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     public string configValueForKeyAndroid(string key) | |||
|  |     { | |||
|  |         string result = TGAndroidAnalytics.Instance.getString(key, ""); | |||
|  |         return result; | |||
|  |     } | |||
|  | 
 | |||
|  |     [UnmanagedFunctionPointer(CallingConvention.Cdecl)] | |||
|  |     public delegate void remoteConfigActivated(); | |||
|  |     // 接收在线参数回调 | |||
|  |     [AOT.MonoPInvokeCallback(typeof(remoteConfigActivated))] | |||
|  |     static void remoteConfigActivatedHandle() | |||
|  |     { | |||
|  |         Instance.onRemoteConfigHandler?.Invoke(); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     /* | |||
|  |     *       | |||
|  |     *          ┌─┐       ┌─┐ | |||
|  |     *       ┌──┘ ┴───────┘ ┴──┐ | |||
|  |     *       │                 │ | |||
|  |     *       │       ───       │ | |||
|  |     *       │  ─┬┘       └┬─  │ | |||
|  |     *       │                 │ | |||
|  |     *       │       ─┴─       │ | |||
|  |     *       │                 │ | |||
|  |     *       └───┐         ┌───┘ | |||
|  |     *           │         │ | |||
|  |     *           │         │ | |||
|  |     *           │         │ | |||
|  |     *           │         └──────────────┐ | |||
|  |     *           │                        │ | |||
|  |     *           │                        ├─┐ | |||
|  |     *           │                        ┌─┘     | |||
|  |     *           │                        │ | |||
|  |     *           └─┐  ┐  ┌───────┬──┐  ┌──┘          | |||
|  |     *             │ ─┤ ─┤       │ ─┤ ─┤          | |||
|  |     *             └──┴──┘       └──┴──┘  | |||
|  |     *              | |||
|  |     *                 以下是通知相关的方法 | |||
|  |     *                  | |||
|  |     */ | |||
|  | 
 | |||
|  |     //获取通知权限 | |||
|  |     public void RegisterAPNS() | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  |         registerAPNS(); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     // 注册通知 | |||
|  |     public void RegisterNotification(string name, string text, string fireDate) | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  | 
 | |||
|  |         registerNotification(name,text,fireDate); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     //移除单个通知 | |||
|  |     public void RemoveNotification(string notiName) | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  | 
 | |||
|  |         removeNotification(notiName); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     //移除所有通知 | |||
|  |     public void RemoveAllNotification() | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  | 
 | |||
|  |         removeAllNotification(); | |||
|  | 
 | |||
|  | #elif UNITY_ANDROID | |||
|  | 
 | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     #region 评价 | |||
|  | 
 | |||
|  |     #region 应用内弹框 | |||
|  | 
 | |||
|  |     public void ShowReview() | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK | |||
|  | 
 | |||
|  |     showAppStoreReView(); | |||
|  | #endif | |||
|  | 
 | |||
|  |     } | |||
|  |     #endregion | |||
|  | 
 | |||
|  |     #endregion | |||
|  | 
 | |||
|  |     #region 用户协议相关 | |||
|  |     /** | |||
|  |      * age : 8、12、16、18 | |||
|  |      */ | |||
|  |     public void ShowUserAgreementView(string contentType, string ageType,string privacy,string termofservice) | |||
|  |     { | |||
|  | #if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK && IOS_CN | |||
|  |         userAgreementDelegate handler = new userAgreementDelegate(userAgreementAgreeHandle); | |||
|  |         IntPtr userAgree = Marshal.GetFunctionPointerForDelegate(handler); | |||
|  |         //调用OC的方法,将C#的回调方法函数指针传给OC | |||
|  |         userAgreementAgreeCallback(userAgree); | |||
|  |         showUserAgreementView(contentType,ageType,privacy,termofservice); | |||
|  | #endif | |||
|  |     } | |||
|  | 
 | |||
|  |     // 用户授权回调 | |||
|  |     [UnmanagedFunctionPointer(CallingConvention.Cdecl)] | |||
|  |     public delegate void userAgreementDelegate(); | |||
|  |     [AOT.MonoPInvokeCallback(typeof(userAgreementDelegate))] | |||
|  |     static void userAgreementAgreeHandle() | |||
|  |     { | |||
|  |         Instance.onAgreeHander?.Invoke(); | |||
|  |     } | |||
|  | 
 | |||
|  |     #endregion | |||
|  | 
 | |||
|  |     #region android 恢复游戏相关 | |||
|  |     public void Ini() | |||
|  |     { | |||
|  |         InitSuccess(); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     public void enterGame() | |||
|  |     { | |||
|  | 
 | |||
|  | #if !UNITY_EDITOR | |||
|  |         if (!isInit) | |||
|  |         { | |||
|  |             ToukaSDKManager.Instance.initAdsSDK(); | |||
|  |             ToukaSDKManager.Instance.initAnalytics(); | |||
|  |             isInit = true; | |||
|  | 
 | |||
|  |             OnAndroidInitSucceed?.Invoke(); | |||
|  |         } | |||
|  | #endif | |||
|  | 
 | |||
|  |     } | |||
|  |     public void InitSuccess() | |||
|  |     { | |||
|  | #if UNITY_ANDROID && !UNITY_EDITOR | |||
|  |         try | |||
|  |         { | |||
|  |             AndroidJavaClass jc = new AndroidJavaClass("com.toukagames.ToukaActivity"); | |||
|  |             jc.CallStatic("initSuccess"); | |||
|  | 
 | |||
|  |         } | |||
|  |         catch (Exception e) | |||
|  |         { | |||
|  |             Debug.LogException(e); | |||
|  | 
 | |||
|  |         } | |||
|  | #endif | |||
|  |     } | |||
|  |     #endregion | |||
|  | } |