keytops-game-framework 1.0.26 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # keytops-game-framework
2
2
 
3
+ ## 2.0 Analytics 迁移
4
+
5
+ 从 2.0.0 开始,`App.launch()` 不再自动启用统计。游戏必须在框架启动完成后、首次访问 `analytics.launch`、`analytics.level`、`analytics.ad`、`analytics.session` 或 `analytics.social` 前显式初始化:
6
+
7
+ ```typescript
8
+ await App.launch(true, { injects: [] });
9
+ analytics.enable(true, [sender]);
10
+ ```
11
+
12
+ `IAnalyticsSender.userPropertyMode` 默认为 `event`,原有 Sender 会继续将用户属性合并到事件。需要使用平台原生用户属性能力的 Sender 应设置为 `sender`,并实现 `setUserProperty()`;这类用户属性不会再重复写入事件参数。
13
+
14
+ 2.0.0 同时将 Analytics 内部公共字段改为可跨平台使用的合法名称,例如 `_dt_` 改为 `duration`、`_av_` 改为 `app_version`。本版本不再双写旧字段,依赖旧字段的报表和查询需要同步迁移。
15
+
3
16
  `keytops-game-framework` 是面向 Cocos Creator 项目的游戏开发框架,提供应用生命周期、网络通信、平台能力、存储、计时器、ECS、FSM、任务、埋点、视图、资源和音频等基础设施。这个包定位于框架层,适合需要直接使用底层模块和引擎适配能力的项目,不是精简 facade SDK。
4
17
 
5
18
  ## 适用场景
@@ -1,4 +1,4 @@
1
- import { EmptyAnalyticsSender } from "./AnalyticsAble";
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "./AnalyticsAble";
2
2
  /**
3
3
  * 阿里云日志时间配置
4
4
  */
@@ -55,5 +55,6 @@ export declare class ALiAnalyticsSender extends EmptyAnalyticsSender {
55
55
  private _addListen;
56
56
  private _restoreEvents;
57
57
  protected _doReport(maxCount?: number, store?: boolean): boolean;
58
- send(eventName: string, data: any): Promise<void>;
58
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
59
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
59
60
  }
@@ -1,7 +1,23 @@
1
1
  /**
2
2
  * 上报数据通用格式定义,方便项目间的通用数据统计
3
3
  */
4
- export type AnalyticsData = {
4
+ export type AnalyticsScalar = string | boolean | number;
5
+ export type AnalyticsItemData = {
6
+ itemId: string;
7
+ itemName?: string;
8
+ itemCategory?: string;
9
+ price: number;
10
+ quantity?: number;
11
+ [key: string]: AnalyticsScalar;
12
+ };
13
+ export type AnalyticsEventValue = AnalyticsScalar | AnalyticsItemData[];
14
+ export type AnalyticsEventData = {
15
+ [key: string]: AnalyticsEventValue;
16
+ };
17
+ export type AnalyticsUserProperties = {
18
+ [key: string]: AnalyticsScalar;
19
+ };
20
+ export type AnalyticsData = AnalyticsEventData & {
5
21
  /**
6
22
  * 标记型ID,可用于关卡id、道具\装备id、广告id等的标记
7
23
  */
@@ -26,7 +42,11 @@ export type AnalyticsData = {
26
42
  * number类型,定义偏向计数数值,可以用于模型行为的计数、数量等。
27
43
  */
28
44
  count?: number;
29
- [key: string]: string | boolean | number;
45
+ [key: string]: AnalyticsEventValue;
46
+ };
47
+ export type AnalyticsMappedEvent = {
48
+ eventName: string;
49
+ data: AnalyticsEventData;
30
50
  };
31
51
  export interface IAnalyticsSender {
32
52
  /**
@@ -44,7 +64,15 @@ export interface IAnalyticsSender {
44
64
  * @param eventName 事件名称
45
65
  * @param data 事件数据
46
66
  */
47
- send(eventName: string, data: any): Promise<void>;
67
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
68
+ /**
69
+ * 将框架语义事件转换成统计平台的物理事件。
70
+ */
71
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
72
+ /**
73
+ * 设置平台用户标识。
74
+ */
75
+ setUserId?(userId: string | null): void;
48
76
  }
49
77
  export declare class EmptyAnalyticsSender implements IAnalyticsSender {
50
78
  protected _exclude: string[];
@@ -58,7 +86,8 @@ export declare class EmptyAnalyticsSender implements IAnalyticsSender {
58
86
  */
59
87
  exclude(...excludeList: string[]): void;
60
88
  sendAble(eventName: string): boolean;
61
- send(eventName: string, data: any): Promise<void>;
89
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
90
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
62
91
  }
63
92
  /**
64
93
  * 统计分析能力
@@ -71,19 +100,22 @@ export declare class AnalyticsAble {
71
100
  protected _senderList: IAnalyticsSender[];
72
101
  protected _staticProperties: AnalyticsData;
73
102
  protected _dynamicCalls: (() => AnalyticsData)[];
74
- protected _userProperties: AnalyticsData;
75
- protected _userOnceProperties: AnalyticsData;
76
- protected _userAddProperties: AnalyticsData;
103
+ protected _userProperties: AnalyticsUserProperties;
104
+ protected _userOnceProperties: AnalyticsUserProperties;
105
+ protected _userAddProperties: AnalyticsUserProperties;
77
106
  protected _timeEvents: Map<string, {
78
107
  start: number;
79
108
  once: boolean;
80
109
  offset: number;
81
110
  }>;
111
+ private _userId;
112
+ private _hasSetUserId;
82
113
  /**
83
114
  * 初始化
84
115
  */
85
116
  init(senders: IAnalyticsSender[], debugMode?: boolean): AnalyticsAble;
86
117
  private _initSenderList;
118
+ private _getUserProperties;
87
119
  /**
88
120
  * 设置排除
89
121
  * @param excludeEvents 排除事件名称或者名称列表。
@@ -115,6 +147,10 @@ export declare class AnalyticsAble {
115
147
  * @param dynamicCall 动态属性的生成函数,事件上报时实时调用
116
148
  */
117
149
  setDynamicProperties(dynamicCall: () => AnalyticsData): void;
150
+ /**
151
+ * 设置平台用户标识。该值不会自动作为事件参数发送。
152
+ */
153
+ setUserId(userId: string | null): void;
118
154
  /**
119
155
  * 对于一般的用户属性,您可以调用 userSet 来进行设置。
120
156
  * 使用该接口上传的属性将会覆盖原有的属性值,如果之前不存在该用户属性,则会新建该用户属性,类型与传入属性的类型一致。
@@ -168,7 +204,7 @@ export declare class AnalyticsAble {
168
204
  /**
169
205
  * 开始事件计时
170
206
  * 如果您需要记录某个事件的持续时长,可以调用 timeEvent 来开始计时。
171
- * 配置您想要计时的事件名称,当您上传该事件时,将会自动在您的事件属性中加入 _dt_ 这一属性来表示记录的时长,单位为秒。
207
+ * 配置您想要计时的事件名称,当您上传该事件时,将会自动在您的事件属性中加入 duration 属性来表示记录的时长,单位为秒。
172
208
  * 需要注意的是,同一个事件名只能有一个在计时的任务。
173
209
  * @param eventName
174
210
  */
@@ -187,5 +223,5 @@ export declare class AnalyticsAble {
187
223
  report(eventName: string, data?: AnalyticsData): Promise<void>;
188
224
  private _sendAble;
189
225
  private _copyToData;
190
- protected _sendReport(eventName: string, data: any): Promise<void>;
226
+ protected _sendReport(eventName: string, data: AnalyticsEventData): Promise<void>;
191
227
  }
@@ -0,0 +1,39 @@
1
+ import { AnalyticsEventData, AnalyticsMappedEvent } from "./AnalyticsAble";
2
+ /**
3
+ * 框架内部统一使用的业务语义事件名。
4
+ * Sender 负责将它们转换成统计平台实际接收的事件名和参数。
5
+ */
6
+ export declare enum AnalyticsBehavior {
7
+ APP_LAUNCH = "app.launch",
8
+ APP_SHOW = "app.show",
9
+ APP_HIDE = "app.hide",
10
+ APP_ERROR = "app.error",
11
+ SESSION_LOGIN = "session.login",
12
+ LEVEL_START = "level.start",
13
+ LEVEL_END = "level.end",
14
+ LEVEL_PAUSE = "level.pause",
15
+ LEVEL_TIMEOUT = "level.timeout",
16
+ LEVEL_ITEM_USE = "level.item_use",
17
+ AD_LIFECYCLE = "ad.lifecycle",
18
+ AD_IMPRESSION = "ad.impression",
19
+ SOCIAL_SHARE = "social.share",
20
+ SOCIAL_SUBSCRIBE_SHOW = "social.subscribe_show",
21
+ SOCIAL_SUBSCRIBE = "social.subscribe",
22
+ TUTORIAL_BEGIN = "tutorial.begin",
23
+ TUTORIAL_COMPLETE = "tutorial.complete",
24
+ TUTORIAL_SKIP = "tutorial.skip",
25
+ PAY_BEGIN = "pay.begin",
26
+ PAY_PURCHASE = "pay.purchase",
27
+ PAY_PENDING = "pay.pending",
28
+ PAY_CANCEL = "pay.cancel",
29
+ PAY_FAIL = "pay.fail"
30
+ }
31
+ /**
32
+ * Keytops/Ali 当前服务端仍使用的物理协议。
33
+ * 兼容逻辑集中在 Sender 边界,业务层无需继续依赖旧事件字符串。
34
+ */
35
+ export declare function mapCanonicalEventToLegacy(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
36
+ /**
37
+ * 小游戏平台通常不接受点号事件名,统一转换为下划线。
38
+ */
39
+ export declare function mapCanonicalEventToFlatName(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
@@ -1,4 +1,4 @@
1
- import { EmptyAnalyticsSender } from "./AnalyticsAble";
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "./AnalyticsAble";
2
2
  export interface KeytopsAnalyticsConfig {
3
3
  /**
4
4
  * 上报地址
@@ -62,6 +62,7 @@ export declare class KeytopsAnalyticsSender extends EmptyAnalyticsSender {
62
62
  private _sendBatch;
63
63
  private _sendBatchWithRetry;
64
64
  protected _doReport(maxCount?: number, store?: boolean): Promise<boolean>;
65
- send(eventName: string, data: any): Promise<void>;
65
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
66
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
66
67
  }
67
68
  export {};
@@ -86,5 +86,5 @@ export declare class ADBehaviorReporter {
86
86
  * @param from 广告来源
87
87
  * @param msg 广告失败原因
88
88
  */
89
- report(type: ADType, event: ADEvent, from: AdFrom, msg?: string): void;
89
+ report(type: ADType, event: ADEvent, from: AdFrom, msg?: string, impression?: boolean): void;
90
90
  }
@@ -0,0 +1,39 @@
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "../AnalyticsAble";
2
+ export interface FirebaseAnalyticsSenderConfig {
3
+ /**
4
+ * 游戏工程内 FirebaseAnalyticsBridge 的完整 Java 类名。
5
+ */
6
+ bridgeClassName: string;
7
+ collectionEnabled?: boolean;
8
+ ignoredParameters?: string[];
9
+ maxParameters?: number;
10
+ /**
11
+ * Java Bridge 是否已支持把 items 转成 Bundle[]。
12
+ */
13
+ supportsStructuredItems?: boolean;
14
+ debug?: boolean;
15
+ }
16
+ /**
17
+ * Firebase Android Analytics 上报器。
18
+ *
19
+ * TS 端属于框架,Java Bridge 仍由具体游戏工程提供。非原生环境会安全忽略调用。
20
+ */
21
+ export declare class FirebaseAnalyticsSender extends EmptyAnalyticsSender {
22
+ private readonly _config;
23
+ private readonly _ignoredParameters;
24
+ private _lastUserId;
25
+ private _lastUserProperties;
26
+ constructor(config: FirebaseAnalyticsSenderConfig, exclude?: string[]);
27
+ get canSend(): boolean;
28
+ setUserId(userId: string | null): void;
29
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
30
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
31
+ private mapParameters;
32
+ private syncUserProperties;
33
+ private setUserProperty;
34
+ private normalizeParameters;
35
+ private normalizeValue;
36
+ private isValidName;
37
+ private truncate;
38
+ private warn;
39
+ }
@@ -4,10 +4,17 @@ import { LevelAnalyticsAble } from "./level/LevelAnalyticsAble";
4
4
  import { LaunchAnalyticsAble } from "./launch/LaunchAnalyticsAble";
5
5
  import { SessionAnalyticsAble } from "./session/SessionAnalyticsAble";
6
6
  import { SocialAnalyticsAble } from "./social/SocialAnalyticsAble";
7
+ import { TutorialAnalyticsAble } from "./tutorial/TutorialAnalyticsAble";
8
+ import { PayAnalyticsAble } from "./pay/PayAnalyticsAble";
7
9
  export * from "./AnalyticsAble";
10
+ export * from "./AnalyticsEvent";
8
11
  export * from "./ALiAnalyticsSender";
9
12
  export * from "./KeytopsAnalyticsSender";
10
13
  export * from "./launch/LaunchAnalyticsAble";
14
+ export * from "./social/SocialAnalyticsAble";
15
+ export * from "./tutorial/TutorialAnalyticsAble";
16
+ export * from "./pay/PayAnalyticsAble";
17
+ export * from "./firebase/FirebaseAnalyticsSender";
11
18
  declare class AnalyticsManager {
12
19
  private hasRelayUrl;
13
20
  private hasAliDirectConfig;
@@ -42,6 +49,16 @@ declare class AnalyticsManager {
42
49
  * 社交统计能力
43
50
  */
44
51
  get social(): SocialAnalyticsAble;
52
+ private _tutorial;
53
+ /**
54
+ * 新手引导统计能力
55
+ */
56
+ get tutorial(): TutorialAnalyticsAble;
57
+ private _pay;
58
+ /**
59
+ * 支付漏斗统计能力
60
+ */
61
+ get pay(): PayAnalyticsAble;
45
62
  /**
46
63
  * 启用统计(基础统计能力)
47
64
  * @param debugMode 调试模式,是否打印日志信息,默认为false
@@ -28,7 +28,7 @@ export declare class LevelAnalyticsAble {
28
28
  * @param gameFlag 关卡所属玩法标识
29
29
  * @param params 关卡参数, 会从端口下发的配置level_config中获取, 也允许手动指定,其他未指定的字段会采用配置中的值。
30
30
  */
31
- onStart(id: string, index: number, gameFlag?: string, data?: Omit<AnalyticsData, 'id' | 'index' | 'type' | 'progress' | 'code'>): Promise<void>;
31
+ onStart(id: string, index: number, gameFlag?: string, data?: Omit<AnalyticsData, 'levelId' | 'levelIndex' | 'gameId' | 'progress' | 'repeatCount'>): Promise<void>;
32
32
  /**
33
33
  * 记录用户操作(包括有效和无效操作)
34
34
  * @param progress 关卡进度 0.0 - 1.0
@@ -1,13 +1,13 @@
1
1
  import { AnalyticsAble, AnalyticsData } from "../AnalyticsAble";
2
2
  import { GameDimension } from "../level/GameDimension";
3
3
  export declare enum GameLeaveType {
4
- success = "lv_success",
5
- fail = "lv_fail",
6
- leave = "lv_leave",
7
- skip = "lv_skip",
8
- revive = "lv_revive",
9
- break = "lv_break",
10
- retry = "lv_retry"
4
+ success = "success",
5
+ fail = "fail",
6
+ leave = "leave",
7
+ skip = "skip",
8
+ revive = "revive",
9
+ break = "break",
10
+ retry = "retry"
11
11
  }
12
12
  /**
13
13
  * 关卡行为自动上报器
@@ -0,0 +1,27 @@
1
+ import { AnalyticsAble, AnalyticsData, AnalyticsItemData } from "../AnalyticsAble";
2
+ export type AnalyticsPayItem = AnalyticsItemData;
3
+ export type PayStage = "create_order" | "native_purchase" | "verify";
4
+ export type PayEventData = AnalyticsData & {
5
+ transactionId: string;
6
+ currency: string;
7
+ items: AnalyticsPayItem[];
8
+ paymentType?: string;
9
+ stage?: PayStage;
10
+ code?: number;
11
+ reason?: string;
12
+ };
13
+ /**
14
+ * 支付漏斗统计能力。价格由业务提供,value 由框架按商品明细统一计算。
15
+ */
16
+ export declare class PayAnalyticsAble {
17
+ private readonly _baseAble;
18
+ constructor(_baseAble: AnalyticsAble);
19
+ begin(data: PayEventData): void;
20
+ purchase(data: PayEventData): void;
21
+ pending(data: PayEventData): void;
22
+ cancel(data: PayEventData): void;
23
+ fail(data: PayEventData): void;
24
+ private report;
25
+ private normalize;
26
+ private invalid;
27
+ }
@@ -1,9 +1,20 @@
1
1
  import { AnalyticsAble } from "../AnalyticsAble";
2
2
  import { AnalyticsData } from "../AnalyticsAble";
3
+ export type SharePhase = "begin" | "success" | "fail";
4
+ export type ShareEventData = AnalyticsData & {
5
+ method?: string;
6
+ contentType?: string;
7
+ itemId?: string | number;
8
+ phase: SharePhase;
9
+ };
3
10
  export declare class SocialAnalyticsAble {
4
11
  private _baseAble;
5
12
  private _socialDimension;
6
13
  constructor(baseAble: AnalyticsAble);
14
+ share(data: ShareEventData): void;
15
+ /**
16
+ * @deprecated 请改用 share,并明确传入分享阶段。
17
+ */
7
18
  recordShare(data: AnalyticsData): void;
8
19
  recordInvite(success?: boolean): void;
9
20
  recordFriendAdd(count?: number): void;
@@ -0,0 +1,16 @@
1
+ import { AnalyticsAble, AnalyticsData } from "../AnalyticsAble";
2
+ export type TutorialEventData = AnalyticsData & {
3
+ tutorialId: string;
4
+ stepId?: string | number;
5
+ reason?: string;
6
+ };
7
+ /**
8
+ * 新手引导统计能力。只提供稳定的业务动作,不维护引导流程状态。
9
+ */
10
+ export declare class TutorialAnalyticsAble {
11
+ private readonly _baseAble;
12
+ constructor(_baseAble: AnalyticsAble);
13
+ begin(data: TutorialEventData): void;
14
+ complete(data: TutorialEventData): void;
15
+ skip(data: TutorialEventData): void;
16
+ }
@@ -1,4 +1,4 @@
1
- import { AnalyticsData } from "../analytics/index";
1
+ import { AnalyticsData, SharePhase } from "../analytics/index";
2
2
  import { KSShareParameters } from "./ks/KSShare";
3
3
  import { TTShareParameters } from "./tt/TTShare";
4
4
  import { WXShareParameters } from "./wx/WXShare";
@@ -21,7 +21,7 @@ export declare class IShareAble {
21
21
  protected _getShareQuery(analyticsName: string | {
22
22
  name: string;
23
23
  } & AnalyticsData, query?: string): string;
24
- protected _report(analyticsName: string | AnalyticsData, msg: string): void;
24
+ protected _report(analyticsName: string | AnalyticsData, phase: SharePhase, method?: string): void;
25
25
  /**
26
26
  * 分享图片或者文字
27
27
  * @param analyticsName 玩法发起分享的动作来源,用于统计。
@@ -1,9 +1,10 @@
1
- import { EmptyAnalyticsSender } from "../../analytics/index";
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "../../analytics/index";
2
2
  /**
3
3
  * 原生平台事件上报器
4
4
  */
5
5
  export declare class NativeAnalyticsSender extends EmptyAnalyticsSender {
6
6
  protected _className: string;
7
7
  constructor(className?: string, exclude?: string[]);
8
- send(eventName: string, data: object): Promise<void>;
8
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
9
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
9
10
  }
@@ -1,7 +1,8 @@
1
- import { EmptyAnalyticsSender } from "../../analytics/index";
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "../../analytics/index";
2
2
  /**
3
3
  * TK事件上报器(window['tt'].reportAnalytics)
4
4
  */
5
5
  export declare class TKAnalyticsSender extends EmptyAnalyticsSender {
6
- send(eventName: string, data: any): Promise<void>;
6
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
7
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
7
8
  }
@@ -1,7 +1,8 @@
1
- import { EmptyAnalyticsSender } from "../../analytics/index";
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "../../analytics/index";
2
2
  /**
3
3
  * 字节事件上报器(window['tt'].reportAnalytics)
4
4
  */
5
5
  export declare class TTAnalyticsSender extends EmptyAnalyticsSender {
6
- send(eventName: string, data: any): Promise<void>;
6
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
7
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
7
8
  }
@@ -1,7 +1,8 @@
1
- import { EmptyAnalyticsSender } from "../../analytics/index";
1
+ import { AnalyticsEventData, AnalyticsMappedEvent, AnalyticsUserProperties, EmptyAnalyticsSender } from "../../analytics/index";
2
2
  /**
3
3
  * 微信事件上报器(window['wx'].reportEvent)
4
4
  */
5
5
  export declare class WXAnalyticsSender extends EmptyAnalyticsSender {
6
- send(eventName: string, data: any): Promise<void>;
6
+ mapEvent(eventName: string, eventData: AnalyticsEventData): AnalyticsMappedEvent;
7
+ send(eventName: string, eventData: AnalyticsEventData, userProperties: AnalyticsUserProperties): Promise<void>;
7
8
  }
package/dist/index.d.ts CHANGED
@@ -108,6 +108,7 @@ export * from './app/module/analytics/AnalyticsAbleConst';
108
108
  export * from './app/module/analytics/KeytopsAnalyticsSender';
109
109
  export * from './app/module/analytics/ALiAnalyticsSender';
110
110
  export * from './app/module/analytics/AnalyticsAble';
111
+ export * from './app/module/analytics/AnalyticsEvent';
111
112
  export * from './app/module/analytics/index';
112
113
  export * from './app/module/analytics/ad/ADBehaviorReporter';
113
114
  export * from './app/module/analytics/ad/AdDimension';
@@ -122,6 +123,9 @@ export * from './app/module/analytics/level/LevelBehaviorReporter';
122
123
  export * from './app/module/analytics/level/PlayerAbilityDimension';
123
124
  export * from './app/module/analytics/session/SessionDimension';
124
125
  export * from './app/module/analytics/session/SessionAnalyticsAble';
126
+ export * from './app/module/analytics/tutorial/TutorialAnalyticsAble';
127
+ export * from './app/module/analytics/pay/PayAnalyticsAble';
128
+ export * from './app/module/analytics/firebase/FirebaseAnalyticsSender';
125
129
  export * from './app/base/base';
126
130
  export * from './app/base/RuntimeApplicationImpl';
127
131
  export * from './app/base/utils/MathUtils';