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