From e08fa9a4829d13987a0d61e434e666448078280c Mon Sep 17 00:00:00 2001 From: juncong lee Date: Sun, 4 Jan 2026 16:14:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Transfer=20SDK=20=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SDKManager/AdjustManager/AdjustManager.cs | 12 ++ Assets/Script/SDKManager/TransferManager.meta | 8 + .../TransferManager/TransferAndroidClass.cs | 158 ++++++++++++++++++ .../TransferAndroidClass.cs.meta | 11 ++ 4 files changed, 189 insertions(+) create mode 100644 Assets/Script/SDKManager/TransferManager.meta create mode 100644 Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs create mode 100644 Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs.meta diff --git a/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs b/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs index 20d883f..9e803c1 100644 --- a/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs +++ b/Assets/Script/SDKManager/AdjustManager/AdjustManager.cs @@ -70,6 +70,7 @@ public class AdjustManager : D_MonoSingleton private void AttributionChangedDelegate(AdjustAttribution attribution) { Debug.Log("Attribution changed network: " + attribution.Network + " campaign: " + attribution.Campaign + " adgroup: " + attribution.Adgroup + " creative: " + attribution.Creative); + SetAttributionData(attribution); if (m_start) return; m_start = true; callbackNetwork = attribution.Network; @@ -81,6 +82,17 @@ public class AdjustManager : D_MonoSingleton InvokeRepeating(nameof(CallGetAttributionAsync), 0, 1); } + private void SetAttributionData(AdjustAttribution att) + { + var network = att.Network; + if(string.IsNullOrEmpty(network)) network = "Organic"; + PlayerPrefsUtils.SavePlayerPrefsString(_adjustNetwork, network); + PlayerPrefsUtils.SavePlayerPrefsString(_adjustCampaign, att?.Campaign); + PlayerPrefsUtils.SavePlayerPrefsString(_adjustAdgroup, att?.Adgroup); + PlayerPrefsUtils.SavePlayerPrefsString(_adjustCreative, att?.Creative); + PlayerPrefsUtils.SavePlayerPrefsString(_adjustClickLabel, att?.ClickLabel); + } + private async Task CallGetAttributionAsync() { callGetTimes++; diff --git a/Assets/Script/SDKManager/TransferManager.meta b/Assets/Script/SDKManager/TransferManager.meta new file mode 100644 index 0000000..7ef463e --- /dev/null +++ b/Assets/Script/SDKManager/TransferManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 154bbe5c15f564b5aa6ef29b783e453e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs b/Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs new file mode 100644 index 0000000..bcff8df --- /dev/null +++ b/Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace WZ +{ + #region Android接口代理类 + + /// + /// RequestListener接口代理 + /// + class RequestListenerProxy : AndroidJavaProxy + { + private Action _callback; + + public RequestListenerProxy(Action callback) : base("com.drive.master.game.RequestListener") + { + _callback = callback; + } + } + + #endregion + + public class TransferAndroidClass : MonoBehaviour + { + private static AndroidJavaClass transferSDKClass = null; + private static AndroidJavaObject currentActivity = null; + public static void Init() + { + if (transferSDKClass == null) + { + try + { + var name = "com.drive.master.game.TransferSDK"; + LoggerUtils.Debug("TransferSDK初始化: class name = "+name); + transferSDKClass = new AndroidJavaClass(name); + // 获取Unity当前Activity + using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) + { + currentActivity = unityPlayer.GetStatic("currentActivity"); + } + } + catch (Exception e) + { + LoggerUtils.Error("TransferSDK初始化失败: " + e.Message); + return; + } + } + + // 调用init方法 + transferSDKClass.CallStatic("init"); + } + + #region VPN权限相关 + + /// + /// 检查是否有VPN权限 + /// + public static bool IsVpnPermissionGranted() + { + if (transferSDKClass == null) + { + LoggerUtils.Warning("TransferSDK未初始化"); + return false; + } + + try + { + return transferSDKClass.CallStatic("isVpnPermissionGranted"); + } + catch (Exception e) + { + LoggerUtils.Error("检查VPN权限失败: " + e.Message); + return false; + } + } + + /// + /// 申请VPN权限并连接VPN + /// + public static void RequestVpnPermission(Action callback) + { + if (transferSDKClass == null) + { + LoggerUtils.Warning("TransferSDK未初始化"); + callback?.Invoke(false,"TransferSDK未初始化"); + return; + } + + try + { + transferSDKClass.CallStatic("requestVpnPermission", currentActivity, new RequestListenerProxy(callback)); + } + catch (Exception e) + { + LoggerUtils.Error("申请VPN权限失败: " + e.Message); + callback?.Invoke(false,"申请VPN权限失败: " + e.Message); + } + } + + /// + /// 检查VPN连接状态 + /// + public static bool IsVpnConnected() + { + if (transferSDKClass == null) + { + LoggerUtils.Warning("TransferSDK未初始化"); + return false; + } + + try + { + return transferSDKClass.CallStatic("isVpnConnected"); + } + catch (Exception e) + { + LoggerUtils.Error("检查VPN状态失败: " + e.Message); + return false; + } + } + + #endregion + + #region AdMob相关 + + /// + /// 检查是否能使用AdMob + /// + public static void IsAllowAdMob(Action callback) + { + if (transferSDKClass == null) + { + Debug.LogWarning("TransferSDK未初始化"); + callback?.Invoke(false, "SDK未初始化"); + return; + } + + try + { + transferSDKClass.CallStatic("isAllowAdMob", new RequestListenerProxy(callback)); + } + catch (Exception e) + { + LoggerUtils.Error("检查AdMob权限失败: " + e.Message); + callback?.Invoke(false, "SDK调用异常"); + } + } + + #endregion + + + } + + + +} diff --git a/Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs.meta b/Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs.meta new file mode 100644 index 0000000..a55a1ca --- /dev/null +++ b/Assets/Script/SDKManager/TransferManager/TransferAndroidClass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5bca977a1cdb4f9498b996d89b1d9ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: