using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using AnyThinkAds.ThirdParty.LitJson; using GoogleMobileAds.Api; using ThinkingData.Analytics; namespace WZ { public class ShuShuEvent : D_MonoSingleton { public static string FormatEventName(string eventName) { if (string.IsNullOrEmpty(eventName)) return eventName; // 替换所有非字母、数字、中文字符为下划线 string formatted = Regex.Replace(eventName, @"[^a-zA-Z0-9\u4e00-\u9fa5]", "_"); // 将连续多个下划线合并为一个 formatted = Regex.Replace(formatted, @"_+", "_"); // 去除首尾的下划线 formatted = formatted.Trim('_'); // 只保留49个字符 if (formatted.Length > 49) { // 确保截断后最后一个字符不是下划线 formatted = formatted.Substring(0, 49); } return formatted; } /// /// 设置用户属性 /// public void UserSet(Dictionary dic,bool setOnce = false) { LoggerUtils.Debug("[shushu] userset:"+JsonMapper.ToJson(dic)); if (setOnce) { TDAnalytics.UserSetOnce(dic); } else { TDAnalytics.UserSet(dic); } } /// /// 设置公共事件属性 /// /// public void SetSuperProperties(Dictionary superProperties) { LoggerUtils.Debug("[shushu] public:"+JsonMapper.ToJson(superProperties)); TDAnalytics.SetSuperProperties(superProperties);//设置公共事件属性 } /// /// 发送事件 /// public void Track(string eventName) { TDAnalytics.Track(eventName); } /// /// 发送事件 /// public void Track(string eventName, string key1, object value1) { var extraInfo = new Dictionary(); if (key1 != null && value1 != null) { extraInfo[key1] = value1; } Track(FormatEventName(eventName), extraInfo); } /// /// 发送事件 /// public void Track(string eventName, Dictionary properties) { TDAnalytics.Track(FormatEventName(eventName), properties); } /// /// 发送事件 /// public void Track(string eventName, Dictionary properties) { var newProperties = properties.ToDictionary( pair => pair.Key, pair => (object)pair.Value ); TDAnalytics.Track(FormatEventName(eventName), newProperties); } /// /// 数数收益上报 /// /// 聚合平台名称 /// 广告平台名称 /// 广告位ID /// 广告格式 /// 单次展示收益 /// 广告展示点位 /// 第几次展示该格式的广告 public void OnAdRevenueEvent(string ad_platform, string ad_source, string ad_unit_name, AdsType ad_format, double revenue, string position, int number,int positionNum, NativeType nativeType) { TDAnalytics.Track("ad_impression", new Dictionary { { "ad_platform", ad_platform }, { "ad_source", ad_source }, { "ad_unit_name", ad_unit_name }, { "ad_format", ad_format.ToString() }, { "value", revenue }, { "currency", "USD" }, { "position", position }, { "format_number", number }, { "position_number", positionNum}, { "native_type", nativeType} }); } } }