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