// using AppsFlyerSDK; using System; using UnityEngine; /// /// 渠道类型枚举 - 区分谷歌商店/俄罗斯渠道 /// [Flags] public enum ChannelType { /// /// 未初始化(默认值,需在游戏启动时设置) /// Unknown = 0, /// /// 谷歌商店渠道 /// GooglePlay = 1, /// /// 俄罗斯渠道(如Yandex Games/本地商店等) /// Rustore = 1 << 1, } /// /// 全局渠道管理类 - 单例模式+静态字段,全局唯一访问 /// public static class ChannelManager { // 全局静态渠道字段 - 私有存储,通过公共方法访问/设置 private static ChannelType _currentChannel = ChannelType.Unknown; /// /// 获取当前渠道(全局只读访问) /// public static ChannelType CurrentChannel { get { Debug.Log($"CurrentChannel => {_currentChannel}"); return _currentChannel; } } #if UNITY_EDITOR public static void SetChannel() { _currentChannel = ChannelType.GooglePlay; } #elif UNITY_ANDROID public static void SetChannel() { string channelStr = ReadMetaData(); if (string.IsNullOrEmpty(channelStr)) { _currentChannel = ChannelType.GooglePlay; return; } bool isSuccess = Enum.TryParse(channelStr, ignoreCase: true, out ChannelType resultChannel); if (isSuccess) { _currentChannel = resultChannel; Debug.Log($"[ChannelManager] 渠道初始化成功,当前渠道:{_currentChannel}"); } else { _currentChannel = ChannelType.GooglePlay; Debug.LogError($"[ChannelManager] 渠道初始化失败,渠道:{channelStr}"); } } static string ReadMetaData() { string metaName = "CHANNEL"; try { // 1. 获取Unity的当前Activity实例(Android原生上下文) using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject currentActivity = cls_UnityPlayer.GetStatic("currentActivity")) { // 创建MetaDataReader实例 AndroidJavaObject metaDataReader = new AndroidJavaObject("com.unity.plugin.MetaDataReader", currentActivity); if (metaDataReader != null) { Debug.Log("[ChannelManager] MetaDataReader Get"); string value = metaDataReader.Call("getAppMetaDataString", metaName); Debug.Log($"[ChannelManager] MetaDataReader Get Value == {value}"); return value; } else { Debug.LogError($"[ChannelManager] MetaDataReader == null"); return string.Empty; } } } } catch (System.Exception e) { Debug.LogError("读取meta-data失败:" + e.Message + "\n" + e.StackTrace); return string.Empty; } } #else public static void SetChannel() { _currentChannel = ChannelType.Unknown; } #endif /// /// 快速判断是否为谷歌商店渠道(语法糖,简化业务代码判断) /// public static bool IsGooglePlay => _currentChannel == ChannelType.GooglePlay; /// /// 快速判断是否为俄罗斯渠道(语法糖,简化业务代码判断) /// public static bool IsRustoreStore => _currentChannel == ChannelType.Rustore; }