Files
18xchat/assets/Scripts/Main/Channel/analytics/UmaAnalyticsSDK.ts
T
2025-09-26 17:34:07 +08:00

85 lines
2.4 KiB
TypeScript

import { IAnalyticsSDK } from "../core/IAnalyticsSDK";
import { logger } from "db://assets/Scripts/Main/Common/Logger";
/**
* UmaAnalyticsSDK
*
* - 负责集成友盟统计(UMeng+)
* - 提供初始化、事件上报、开关控制等功能
*/
export class UmaAnalyticsSDK implements IAnalyticsSDK {
private enabled: boolean = false;
/**
* 初始化友盟统计
* @param cb 初始化完成后的回调
*
* - 通常在游戏启动时调用
* - 内部调用 window["wx"].uma.init 或其他平台的 UMA 初始化
*/
init(cb?: Function): void {
try {
if (typeof window !== "undefined" && window["wx"] && window["wx"].uma) {
window["wx"].uma.init({
appKey: "YOUR_UMA_APP_KEY", // TODO: 替换成实际 key
useOpenid: true,
autoGetOpenid: true,
debug: false,
uploadUserInfo: true,
});
this.enabled = true;
logger.info("UmaAnalyticsSDK 初始化完成 ");
} else {
this.enabled = false;
logger.warn("UmaAnalyticsSDK 初始化失败 (未检测到 wx.uma)");
}
} catch (e) {
this.enabled = false;
logger.error("UmaAnalyticsSDK 初始化异常:", e);
}
cb && cb();
}
/**
* 是否启用 UMA 统计
*
* @returns true 启用,false 关闭
*/
isAnalyticsEnabled(): boolean {
return this.enabled;
}
/**
* 上报事件
* @param eventName 事件名称
* @param value 事件参数(可选)
*
* - 例如:trackEvent("_um.talk.round", { round: 5 })
*/
trackEvent(eventName: string, value?: any): void {
if (!this.enabled) {
logger.debug("UmaAnalyticsSDK 未启用,跳过事件上报:", eventName, value);
return;
}
try {
window["wx"].uma.trackEvent(eventName, value || {});
logger.info("UmaAnalyticsSDK 上报事件:", eventName, value);
} catch (e) {
logger.error("UmaAnalyticsSDK 上报事件失败:", e);
}
}
/**
* 销毁 SDK
*
* - 用于释放资源或清理缓存
* - 通常在游戏退出或切换环境时调用
*/
destroy(): void {
logger.info("UmaAnalyticsSDK 已销毁");
this.enabled = false;
}
}