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