2022-02-15 10:18:44 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
|
|
|
|
|
|
using Touka.GameLogic;
|
|
|
|
|
|
|
|
|
|
|
|
public class TGTools : ToukaSingletonMonoBehaviour<TGTools>
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
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")]
|
2022-04-29 17:23:07 +00:00
|
|
|
|
private static extern void showUserAgreementView(string contentType,string ageType,string privacy ,string termofservice);
|
2022-02-15 10:18:44 +00:00
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
|
|
return "";
|
|
|
|
|
|
|
|
|
|
|
|
#elif UNITY_ANDROID
|
|
|
|
|
|
|
|
|
|
|
|
return configValueForKeyAndroid(key);
|
|
|
|
|
|
|
|
|
|
|
|
#elif UNITY_IPHONE && !NO_SDK
|
|
|
|
|
|
return configValueForKey(key);
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
return "";
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string configValueForKeyAndroid(string key)
|
|
|
|
|
|
{
|
|
|
|
|
|
string result = "";
|
|
|
|
|
|
//try
|
|
|
|
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
// AndroidJavaClass jc = new AndroidJavaClass("com.toukagames.toukaumengsdk.UmengRemoteConfig");
|
|
|
|
|
|
// result = jc.CallStatic<string>("getValueByKey", key);
|
|
|
|
|
|
//}
|
|
|
|
|
|
//catch (Exception e)
|
|
|
|
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Debug.LogException(e);
|
|
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
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
|
|
|
|
|
|
*/
|
2022-04-29 17:23:07 +00:00
|
|
|
|
public void ShowUserAgreementView(string contentType, string ageType, string privacy, string termofservice)
|
2022-02-15 10:18:44 +00:00
|
|
|
|
{
|
|
|
|
|
|
#if UNITY_IPHONE && !UNITY_EDITOR && !NO_SDK && IOS_CN
|
|
|
|
|
|
userAgreementDelegate handler = new userAgreementDelegate(userAgreementAgreeHandle);
|
|
|
|
|
|
IntPtr userAgree = Marshal.GetFunctionPointerForDelegate(handler);
|
|
|
|
|
|
//调用OC的方法,将C#的回调方法函数指针传给OC
|
|
|
|
|
|
userAgreementAgreeCallback(userAgree);
|
2022-04-29 17:23:07 +00:00
|
|
|
|
showUserAgreementView(contentType,ageType,privacy,termofservice);
|
2022-02-15 10:18:44 +00:00
|
|
|
|
#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;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
#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
|
|
|
|
|
|
}
|