@chiyou/minigame-framework 1.3.5 → 1.3.7
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/package.json
CHANGED
|
@@ -12,51 +12,81 @@ export type EventParams = Record<string, string | number | boolean> | string;
|
|
|
12
12
|
|
|
13
13
|
// ==================== 配置接口 ====================
|
|
14
14
|
|
|
15
|
-
/**
|
|
15
|
+
/** 友盟统计配置 */
|
|
16
16
|
export interface UmengConfig {
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
/** 各平台是否开启统计(必填) */
|
|
18
|
+
platformEnableMap: Map<PlatformID, boolean>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// ==================== SDK 类型声明 ====================
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 友盟 SDK 接口定义
|
|
25
|
+
*
|
|
26
|
+
* 仅包含实际可用的方法(共12个)
|
|
27
|
+
* 已移除:removeUserid, setUserInfo, setAnonymousid, setAppVersion, setSuperProperty(不可用)
|
|
28
|
+
* 已移除:revenue, stage, level, rc(插件方法)
|
|
29
|
+
*
|
|
30
|
+
* 使用方式:SDK 在 game.js 中初始化后,通过 wx.uma 全局实例访问
|
|
31
|
+
*/
|
|
32
|
+
export interface UmaSDK {
|
|
33
|
+
/** 恢复会话(onShow 时调用) */
|
|
34
|
+
resume(options?: any): void;
|
|
35
|
+
/** 暂停会话(onHide 时调用) */
|
|
36
|
+
pause(): void;
|
|
37
|
+
/** 上报自定义事件 */
|
|
38
|
+
trackEvent(eventName: string, params?: object | string): void;
|
|
39
|
+
/** 上报分享 */
|
|
40
|
+
trackShare(shareOptions: object): object;
|
|
41
|
+
/** 页面开始 */
|
|
42
|
+
trackPageStart(pageName: string): void;
|
|
43
|
+
/** 页面结束 */
|
|
44
|
+
trackPageEnd(pageName: string): void;
|
|
45
|
+
/** 设置 openid */
|
|
46
|
+
setOpenid(openid: string): void;
|
|
47
|
+
/** 设置 unionid */
|
|
48
|
+
setUnionid(unionid: string): void;
|
|
49
|
+
/** 设置用户 ID */
|
|
50
|
+
setUserid(userid: string, provider?: string): void;
|
|
51
|
+
/** 注册分享回调 */
|
|
52
|
+
onShareAppMessage(callback: () => object): void;
|
|
53
|
+
/** 调用分享 */
|
|
54
|
+
shareAppMessage(options: object): void;
|
|
25
55
|
}
|
|
26
56
|
|
|
27
57
|
// ==================== 预定义事件 ID ====================
|
|
28
58
|
|
|
29
59
|
/** 预定义事件 ID */
|
|
30
60
|
export enum AnalyticsEventId {
|
|
31
|
-
LevelStart =
|
|
32
|
-
LevelComplete =
|
|
33
|
-
LevelFail =
|
|
34
|
-
AdShow =
|
|
35
|
-
AdClick =
|
|
36
|
-
AdComplete =
|
|
37
|
-
AdSkip =
|
|
38
|
-
AdError =
|
|
39
|
-
Purchase =
|
|
40
|
-
Share =
|
|
41
|
-
Login =
|
|
42
|
-
GameLaunch =
|
|
43
|
-
GameError =
|
|
61
|
+
LevelStart = "level_start",
|
|
62
|
+
LevelComplete = "level_complete",
|
|
63
|
+
LevelFail = "level_fail",
|
|
64
|
+
AdShow = "ad_show",
|
|
65
|
+
AdClick = "ad_click",
|
|
66
|
+
AdComplete = "ad_complete",
|
|
67
|
+
AdSkip = "ad_skip",
|
|
68
|
+
AdError = "ad_error",
|
|
69
|
+
Purchase = "purchase",
|
|
70
|
+
Share = "share",
|
|
71
|
+
Login = "login",
|
|
72
|
+
GameLaunch = "game_launch",
|
|
73
|
+
GameError = "game_error",
|
|
44
74
|
}
|
|
45
75
|
|
|
46
76
|
/** 事件参数键名 */
|
|
47
77
|
export enum AnalyticsParamKey {
|
|
48
|
-
Level =
|
|
49
|
-
Score =
|
|
50
|
-
Duration =
|
|
51
|
-
Reason =
|
|
52
|
-
AdType =
|
|
53
|
-
AdId =
|
|
54
|
-
ItemId =
|
|
55
|
-
ItemName =
|
|
56
|
-
Price =
|
|
57
|
-
Currency =
|
|
58
|
-
ShareType =
|
|
59
|
-
ShareContent =
|
|
60
|
-
ErrorCode =
|
|
61
|
-
ErrorMsg =
|
|
78
|
+
Level = "level",
|
|
79
|
+
Score = "score",
|
|
80
|
+
Duration = "duration",
|
|
81
|
+
Reason = "reason",
|
|
82
|
+
AdType = "ad_type",
|
|
83
|
+
AdId = "ad_id",
|
|
84
|
+
ItemId = "item_id",
|
|
85
|
+
ItemName = "item_name",
|
|
86
|
+
Price = "price",
|
|
87
|
+
Currency = "currency",
|
|
88
|
+
ShareType = "share_type",
|
|
89
|
+
ShareContent = "share_content",
|
|
90
|
+
ErrorCode = "error_code",
|
|
91
|
+
ErrorMsg = "error_msg",
|
|
62
92
|
}
|
|
@@ -3,12 +3,9 @@ import { LogUtils } from "../Utils/LogUtils";
|
|
|
3
3
|
import { ServiceLocator } from "../Utils/ServiceLocator";
|
|
4
4
|
import { FwkErrorCode } from "../Definition/FwkErrorDefinition";
|
|
5
5
|
import { PlatformID } from "../Definition/SystemDefinition";
|
|
6
|
-
import { UmengConfig, EventParams, AnalyticsEventId, AnalyticsParamKey } from "../Definition/AnalyticsDefinition";
|
|
7
|
-
import { UmaInitConfig, UmaSDK, uma as wxUma } from "../SDK/Umeng/umtrack-wx-game";
|
|
6
|
+
import { UmengConfig, EventParams, AnalyticsEventId, AnalyticsParamKey, UmaSDK } from "../Definition/AnalyticsDefinition";
|
|
8
7
|
import { EventMgr } from "./EventMgr";
|
|
9
8
|
import { FrameworkBase } from "../Definition/FrameworkBase";
|
|
10
|
-
// 后续新增平台 SDK 在此导入,例如:
|
|
11
|
-
// import { uma as ttUma } from "../SDK/Umeng/umtrack-tt-game";
|
|
12
9
|
|
|
13
10
|
export class AnalyticsMgr extends BaseMgr {
|
|
14
11
|
/** 单例实例 */
|
|
@@ -20,26 +17,8 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
20
17
|
private _isInited: boolean = false;
|
|
21
18
|
/** 是否启用统计 */
|
|
22
19
|
private _isEnabled: boolean = false;
|
|
23
|
-
/**
|
|
24
|
-
private _umengConfig: UmengConfig = null;
|
|
25
|
-
/** 当前平台的 appKey */
|
|
26
|
-
private _appKey: string = "";
|
|
27
|
-
/** 当前平台对应的 SDK 实例 */
|
|
20
|
+
/** 当前平台对应的 SDK 实例(通过 wx.uma 全局访问) */
|
|
28
21
|
private _sdk: UmaSDK = null;
|
|
29
|
-
/** 当前页面名称(用于 trackPageStart/End 配对) */
|
|
30
|
-
private _currentPage: string = "";
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* 平台 → SDK 实例映射
|
|
34
|
-
* 新增平台时:
|
|
35
|
-
* 1. 在 SDK/Umeng/ 下添加对应的 SDK 文件
|
|
36
|
-
* 2. 在顶部 import 并在此注册
|
|
37
|
-
*/
|
|
38
|
-
private static _sdkMap: Map<PlatformID, UmaSDK> = new Map([
|
|
39
|
-
[PlatformID.ID_MiniGame_WeiXin, wxUma],
|
|
40
|
-
// 新增平台示例:
|
|
41
|
-
// [PlatformID.ID_MiniGame_DouYin, ttUma],
|
|
42
|
-
]);
|
|
43
22
|
|
|
44
23
|
onLoad(): void {
|
|
45
24
|
super.onLoad();
|
|
@@ -53,7 +32,7 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
53
32
|
|
|
54
33
|
ServiceLocator.Instance.register("AnalyticsMgr", this);
|
|
55
34
|
|
|
56
|
-
// 注意:SDK
|
|
35
|
+
// 注意:SDK 在 game.js 中初始化,已自动注册 wx.onShow/wx.onHide
|
|
57
36
|
// 无需在 AnalyticsMgr 监听生命周期事件
|
|
58
37
|
|
|
59
38
|
EventMgr.Instance.on(FrameworkBase.Message.UserMgr_PlatformOpenId_Ready, this._onPlatformOpenIdReady, this);
|
|
@@ -67,11 +46,11 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
67
46
|
|
|
68
47
|
/**
|
|
69
48
|
* 初始化统计管理器
|
|
70
|
-
* @param umengConfig
|
|
49
|
+
* @param umengConfig 友盟统计配置
|
|
71
50
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
51
|
+
* SDK 的初始化(appKey/useOpenid/autoGetOpenid/debug)在构建时注入 game.js 开头,
|
|
52
|
+
* 引擎加载前已执行。此方法仅根据 platformEnableMap 判断当前平台是否开启统计,
|
|
53
|
+
* 并检查 wx.uma 是否可用。
|
|
75
54
|
*/
|
|
76
55
|
public init(umengConfig: UmengConfig): void {
|
|
77
56
|
if (this._isInited) {
|
|
@@ -88,28 +67,19 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
88
67
|
return;
|
|
89
68
|
}
|
|
90
69
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// 根据当前平台是否配置了 appKey 和 SDK 来决定是否启用
|
|
70
|
+
// 根据当前平台是否开启统计来决定是否启用
|
|
94
71
|
const platformID: PlatformID = BaseMgr.Instance.getCurrentPlatformID();
|
|
95
|
-
const
|
|
96
|
-
const sdk = AnalyticsMgr._sdkMap.get(platformID);
|
|
72
|
+
const enabled = umengConfig.platformEnableMap.get(platformID);
|
|
97
73
|
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
this._sdk =
|
|
101
|
-
this._isEnabled = this.
|
|
74
|
+
if (enabled) {
|
|
75
|
+
// 从全局获取 SDK 实例(在 game.js 中初始化后挂载到 wx.uma)
|
|
76
|
+
this._sdk = this._getGlobalSDK();
|
|
77
|
+
this._isEnabled = !!this._sdk;
|
|
102
78
|
} else {
|
|
103
79
|
this._isEnabled = false;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
});
|
|
108
|
-
} else {
|
|
109
|
-
LogUtils.Instance.info(AnalyticsMgr.TAG, "当前平台未配置友盟appKey,统计功能已禁用", {
|
|
110
|
-
platformID: PlatformID[platformID],
|
|
111
|
-
});
|
|
112
|
-
}
|
|
80
|
+
LogUtils.Instance.info(AnalyticsMgr.TAG, "当前平台未开启统计", {
|
|
81
|
+
platformID: PlatformID[platformID],
|
|
82
|
+
});
|
|
113
83
|
}
|
|
114
84
|
|
|
115
85
|
this._isInited = true;
|
|
@@ -119,16 +89,36 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
119
89
|
});
|
|
120
90
|
}
|
|
121
91
|
|
|
92
|
+
/**
|
|
93
|
+
* 获取全局 SDK 实例
|
|
94
|
+
* SDK 在 game.js 中通过 `import uma from ...` + `uma.init()` 初始化,
|
|
95
|
+
* 初始化后自动挂载到 wx.uma(微信)或对应平台的全局对象上。
|
|
96
|
+
*/
|
|
97
|
+
private _getGlobalSDK(): UmaSDK | null {
|
|
98
|
+
try {
|
|
99
|
+
const g = globalThis as any;
|
|
100
|
+
// 微信小游戏:SDK 挂载到 wx.uma
|
|
101
|
+
if (g.wx && g.wx.uma) {
|
|
102
|
+
return g.wx.uma as UmaSDK;
|
|
103
|
+
}
|
|
104
|
+
// 后续新增平台在此添加,例如:
|
|
105
|
+
// if (g.tt && g.tt.uma) return g.tt.uma as UmaSDK;
|
|
106
|
+
return null;
|
|
107
|
+
} catch (e) {
|
|
108
|
+
LogUtils.Instance.warn(AnalyticsMgr.TAG, "获取全局SDK实例失败", {
|
|
109
|
+
reason: String(e),
|
|
110
|
+
});
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
122
115
|
private _onPlatformOpenIdReady(platformOpenId: string): void {
|
|
123
116
|
if (!this._isEnabled) return;
|
|
124
|
-
|
|
125
|
-
if (this._umengConfig && this._umengConfig.useOpenid && !this._umengConfig.autoGetOpenid) {
|
|
126
|
-
this.setOpenId(platformOpenId);
|
|
127
|
-
}
|
|
117
|
+
this.setOpenId(platformOpenId);
|
|
128
118
|
}
|
|
129
119
|
|
|
130
120
|
// ==================== 生命周期 ====================
|
|
131
|
-
// 注意:SDK
|
|
121
|
+
// 注意:SDK 在 game.js 中已自动注册 wx.onShow/wx.onHide 的 resume/pause 调用
|
|
132
122
|
|
|
133
123
|
// ==================== 事件上报 ====================
|
|
134
124
|
|
|
@@ -161,7 +151,6 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
161
151
|
if (!this._isEnabled) return;
|
|
162
152
|
try {
|
|
163
153
|
this._sdk.trackPageStart(pageName);
|
|
164
|
-
this._currentPage = pageName;
|
|
165
154
|
LogUtils.Instance.info(AnalyticsMgr.TAG, "页面开始", {
|
|
166
155
|
pageName: pageName,
|
|
167
156
|
});
|
|
@@ -182,7 +171,6 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
182
171
|
if (!this._isEnabled) return;
|
|
183
172
|
try {
|
|
184
173
|
this._sdk.trackPageEnd(pageName);
|
|
185
|
-
this._currentPage = "";
|
|
186
174
|
LogUtils.Instance.info(AnalyticsMgr.TAG, "页面结束", {
|
|
187
175
|
pageName: pageName,
|
|
188
176
|
});
|
|
@@ -308,44 +296,12 @@ export class AnalyticsMgr extends BaseMgr {
|
|
|
308
296
|
return this._isEnabled;
|
|
309
297
|
}
|
|
310
298
|
|
|
311
|
-
/** 当前页面 */
|
|
312
|
-
|
|
313
299
|
// ==================== 私有方法 ====================
|
|
314
300
|
|
|
315
|
-
/** 初始化友盟 SDK */
|
|
316
|
-
private _initUmeng(): boolean {
|
|
317
|
-
try {
|
|
318
|
-
const sdkConfig: UmaInitConfig = {
|
|
319
|
-
appKey: this._appKey,
|
|
320
|
-
useOpenid: this._umengConfig.useOpenid,
|
|
321
|
-
autoGetOpenid: this._umengConfig.autoGetOpenid,
|
|
322
|
-
debug: this._umengConfig.debug,
|
|
323
|
-
};
|
|
324
|
-
this._sdk.init(sdkConfig);
|
|
325
|
-
LogUtils.Instance.info(AnalyticsMgr.TAG, "友盟SDK初始化成功", {
|
|
326
|
-
appKey: this._appKey,
|
|
327
|
-
useOpenid: sdkConfig.useOpenid,
|
|
328
|
-
debug: sdkConfig.debug,
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
return true;
|
|
332
|
-
} catch (e) {
|
|
333
|
-
LogUtils.Instance.error(AnalyticsMgr.TAG, FwkErrorCode.Analytics.SDKInitFailed, {
|
|
334
|
-
operation: "_initUmeng",
|
|
335
|
-
reason: String(e),
|
|
336
|
-
appKey: this._appKey,
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
return false;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
301
|
/** 展开 EventParams 为普通对象 */
|
|
346
302
|
private _flattenParams(params?: EventParams): Record<string, any> {
|
|
347
303
|
if (!params) return {};
|
|
348
|
-
if (typeof params ===
|
|
304
|
+
if (typeof params === "string") return { value: params };
|
|
349
305
|
return params as Record<string, any>;
|
|
350
306
|
}
|
|
351
307
|
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 友盟+ 微信小程序游戏版 SDK
|
|
3
|
-
* 由 umtrack-wx-game.js 转换而来,适配 Cocos Creator 3.x TypeScript 环境
|
|
4
|
-
* 采用直接执行方案,不使用 new Function() 沙箱
|
|
5
|
-
* @version 2.8.2
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
// @ts-nocheck
|
|
9
|
-
// 禁用 TypeScript 检查,因为 SDK 是压缩后的 JS 代码
|
|
10
|
-
|
|
11
|
-
// ============================================
|
|
12
|
-
// SDK 内部实现(直接执行,非沙箱)
|
|
13
|
-
// ============================================
|
|
14
|
-
|
|
15
|
-
var e="[UMENG] -- ",t=function(){var t=null,n=!1;function i(){this.setDebug=function(e){n=e};this.d=function(){if(n)try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.debug.apply(console,arguments)}catch(e){}};this.i=function(){try{if(n)try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.info.apply(console,arguments)}catch(e){}}catch(e){}};this.e=function(){if(n)try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.error.apply(console,arguments)}catch(e){}};this.w=function(){if(n)try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.warn.apply(console,arguments)}catch(e){}};this.v=function(){if(n)try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.log.apply(console,arguments)}catch(e){}};this.t=function(){if(n)try{console.table.apply(console,arguments)}catch(e){}};this.tip=function(){try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.log.apply(console,arguments)}catch(e){}};this.tip_w=function(t){try{console.log("%c "+e+t,"background:red; padding: 4px; padding-right: 8px; border-radius: 4px; color: #fff;")}catch(e){}};this.err=function(){try{"string"==typeof arguments[0]&&(arguments[0]=e+arguments[0]);console.error.apply(console,arguments)}catch(e){}};this.repeat=function(e){for(var t=e;t.length<86;)t+=e;return t}}return function(){null===t&&(t=new i);return t}}(),n=function(){var e=null;function t(){var e={};this.useOpenid=function(){return!!e.useOpenid};this.useSwanid=function(){return!!e.useSwanid};this.autoGetOpenid=function(){return!!e.autoGetOpenid};this.appKey=function(){return e.appKey};this.uploadUserInfo=function(){return e.uploadUserInfo};this.enableVerify=function(){return e.enableVerify};this.set=function(t){e=t};this.get=function(){return e};this.setItem=function(t,n){e[t]=n};this.getItem=function(t){return e[t]}}return function(){e||(e=new t);return e}}();function i(){}i.prototype={on:function(e,t,n){var i=this.e||(this.e={});(i[e]||(i[e]=[])).push({fn:t,ctx:n});return this},once:function(e,t,n){var i=this;function r(){i.off(e,r);t.apply(n,arguments)}r._=t;return this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),i=0,r=n.length;i<r;i++)n[i].fn.apply(n[i].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),i=n[e],r=[];if(i&&t)for(var o=0,s=i.length;o<s;o++)i[o].fn!==t&&i[o].fn._!==t&&r.push(i[o]);r.length?n[e]=r:delete n[e];return this}};var r=new i;r.messageType={CONFIG_LOADED:0,UMA_LIB_INITED:1};var o=function(e,t){o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return o(e,t)};function s(e,t){o(e,t);function n(){this.constructor=e}e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=new(function(e){s(n,e);function n(){return null!==e&&e.apply(this,arguments)||this}n.prototype.getSdkType=function(){return"wxgamemp"};n.prototype.getUserInfo=function(e){var n={fail:function(){e&&e()},success:function(t){if(t&&t.userInfo){var n=t.userInfo;e&&e({avatar:n.avatarUrl,nickName:n.nickName,gender:n.gender,country:n.country,province:n.province,city:n.city,language:n.language})}}};try{wx.getSetting({success:function(e){e.authSetting["scope.userInfo"]&&wx.getUserInfo(n)},fail:function(){e()}})}catch(e){t.e("getUserInfo error",e)}};return n}(function(){function e(){}e.prototype.setStorage=function(e,t,n){wx.setStorage({key:e,data:t,success:function(){"function"==typeof n&&n(!0)},fail:function(){"function"==typeof n&&n(!1)}})};e.prototype.getStorage=function(e,n){wx.getStorage({key:e,success:function(e){"function"==typeof n&&n(e.data)},fail:function(i){t().w(e+": "+i.errMsg);"function"==typeof n&&n()}})};e.prototype.removeStorage=function(e,t){wx.removeStorage({key:e,success:function(){"function"==typeof t&&t(!0)},fail:function(){"function"==typeof t&&t(!1)}})};e.prototype.getSystemInfo=function(e){wx.getSystemInfo({success:function(t){t.safeArea=t.safeArea||{};var n="";t.host&&"string"==typeof t.host.env&&(n=t.host.env);var i={model:t.model,brand:t.brand,pixelRatio:t.pixelRatio,screenWidth:t.screenWidth,screenHeight:t.screenHeight,fontSizeSetting:t.fontSizeSetting,platform:t.platform,platformVersion:t.version,platformSDKVersion:t.SDKVersion,language:t.language,deviceName:t.model,OSVersion:t.system,resolution:"",theme:t.theme,benchmarkLevel:t.benchmarkLevel,safeArea:{width:t.safeArea.width,height:t.safeArea.height,top:t.safeArea.top,left:t.safeArea.left,bottom:t.safeArea.bottom,right:t.safeArea.right},statusBarHeight:t.statusBarHeight,host:n},r=t.system.split(" ");Array.isArray(r)&&(i.OS=r[0]);var o=Math.round(t.screenWidth*t.pixelRatio),s=Math.round(t.screenHeight*t.pixelRatio);i.resolution=o>s?o+"*"+s:s+"*"+o;"function"==typeof e&&e(i)},fail:function(){"function"==typeof e&&e()}})};e.prototype.getDeviceInfo=function(e){"function"==typeof e&&e("")};e.prototype.checkNetworkAvailable=function(e){wx.getNetworkType({success:function(t){"function"==typeof e&&e(t&&"none"!==t.networkType)},fail:function(){"function"==typeof e&&e(!1)}})};e.prototype.getNetworkInfo=function(e){wx.getNetworkType({success:function(t){"function"==typeof e&&e({networkAvailable:"none"!==t.networkType,networkType:t.networkType})},fail:function(){"function"==typeof e&&e()}})};e.prototype.getDeviceId=function(e){e("")};e.prototype.getAdvertisingId=function(e){"function"==typeof e&&e("")};e.prototype.onNetworkStatusChange=function(e){wx.onNetworkStatusChange((function(t){"function"==typeof e&&e(t.isConnected)}))};e.prototype.request=function(e){var t=e.success,n=e.fail,i=!1,r=null;e.success=function(e){if(!i){r&&clearTimeout(r);"function"==typeof t&&t(e)}};e.fail=function(){if(!i){r&&clearTimeout(r);"function"==typeof n&&n(!1)}};wx.request(e);r=setTimeout((function(){r&&clearTimeout(r);i=!0;"function"==typeof n&&n(i)}),e.timeout||5e3)};e.prototype.getSdkType=function(){return"wxmp"};e.prototype.getPlatform=function(){return"wx"};e.prototype.getUserInfo=function(e){e()};e.prototype.getAppInfoSync=function(){if(wx.getAccountInfoSync){var e=wx.getAccountInfoSync(),t=e&&e.miniProgram?e.miniProgram:{};return{appId:t.appId,appEnv:t.envVersion,appVersion:t.version}}return{}};e.prototype.onShareAppMessage=function(e){wx.onShareAppMessage(e)};e.prototype.shareAppMessage=function(e){wx.shareAppMessage(e)};e.prototype.getLaunchOptionsSync=function(){var e=null;if(e)return e;if(!wx.getLaunchOptionsSync)return{};try{e=wx.getLaunchOptionsSync()}catch(t){e=null}return e||{}};return e}())),u={SESSION_INTERVAL:3e4,LOG_URL:"/wxm_logs",GET_OPENID_URL:"/uminiprogram_logs/wx/getuut",USERINFO_URL:"/uminiprogram_logs/comm/uif",ENDPOINT:"https://umini.shujupie.com",ENDPOINTB:"https://ulogs.umeng.com",DEVICE_INFO_KEY:"device_info",ADVERTISING_ID:"mobile_ad_id",ANDROID_ID:"android_id",CURRENT_SESSION:"current_session",SESSION_PAUSE_TIME:"session_pause_time",EVENT_SEND_DEFAULT_INTERVAL:15e3,EVENT_LAST_SEND_TIME:"last_send_time",MAX_EVENTID_LENGTH:128,MAX_PROPERTY_KEY_LENGTH:256,MAX_PROPERTY_KEYS_COUNT:100,REPORT_POLICY:"report_policy",REPORT_INTERVAL_TIME:"report_interval_time",REPORT_POLICY_START_SEND:"1",REPORT_POLICY_INTERVAL:"6",IMPRINT:"imprint",SEED_VERSION:"1.0.0",IMPL_VERSION:"2.8.2",ALIPAY_AVAILABLE_VERSION:"10.1.52",SHARE_PATH:"um_share_path",SHARES:"shares",REQUESTS:"requests",UUID:"um_uuid",UUID_SUFFIX:"ud",OPENID:"um_od",UNIONID:"um_unid",ALIPAYID:"um_alipayid",USERID:"um_userid",PROVIDER:"um_provider",SWANID:"um_swanid",ANONYMOUSID:"um_anonymousid",LAUNCH_OPTIONS:"LAUNCH_OPTIONS",UM_SSRC:"_um_ssrc",USER_INFO:"user_info",IS_ALIYUN:!1};var c,f={isNumber:function(e){return!Number.isNaN(parseInt(e,10))},compareVersion:function(e,t){for(var n=String(e).split("."),i=String(t).split("."),r=0;r<Math.max(n.length,i.length);r++){var o=parseInt(n[r]||0,10),s=parseInt(i[r]||0,10);if(o>s)return 1;if(o<s)return-1}return 0},getRandomStr:function(e){for(var t="",n=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],i=0;i<Number(e);i++){t+=n[Math.round(Math.random()*(n.length-1))]}return t},clone:function(e){return JSON.parse(JSON.stringify(e))},startsWith:function(e,t){return!(!e||!t||0===t.length||t.length>e.length)&&e.substr(0,t.length)===t},endsWith:function(e,t){return!(!t||0===e.length||t.length>e.length)&&e.substring(e.length-t.length)===t},assign:function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n<arguments.length;n++){var i=arguments[n];if(i)for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(t[r]=i[r])}return t},deepEqual:function e(t,n){if(t===n)return!0;if(t&&"object"==typeof t&&n&&"object"==typeof n){if(Object.keys(t).length!==Object.keys(n).length)return!1;for(var i in t){if(Object.prototype.hasOwnProperty.call(n,i))return!1;if(!e(t[i],n[i]))return!1}return!0}return!1},trimStart:function(e,t){if(!e)return"";if("string"==typeof t&&t.length){var n=new RegExp("^"+t+"*");e=e.replace(n,"")}else e=e.replace(/^s*/,"");return e},trimEnd:function(e,t){if(!e)return"";var n,i;if("string"==typeof t&&t.length){n=new RegExp(t);i=e.length;for(;n.test(e.charAt(i));)i-=1;return e.slice(0,i+1)}n=/s/;i=e.length-1;for(;n.test(e.charAt(i));)i-=1;return e.slice(0,i+1)},isFunction:function(e){return"function"==typeof e}},p=function(e){s(n,e);function n(){return null!==e&&e.apply(this,arguments)||this}n.prototype.getOpenIdAsync=function(e,n){var i=this;wx.login({success:function(r){r.code?a.request({url:u.ENDPOINT+u.GET_OPENID_URL,method:"GET",data:{key:e,code:r.code},success:function(e){if(e&&200===e.statusCode&&e.data&&e.data.data){var t=e.data.data;i.setOpenid(t.oid);i.setUnionid(t.uid);return n&&n(!0)}n&&n()},fail:function(e){t().v("wx request failed...",e);n&&n()}}):n&&n()},fail:function(){n&&n()}})};return n}(function(e){s(n,e);function n(){var t=null!==e&&e.apply(this,arguments)||this;t._openid="";t._unionid="";t._useOpenid=!1;return t}n.prototype.initID=function(e){var n=this;n._idType=n._useOpenid?"openid":"uuid";t().v("id type: ",n._idType);a.getStorage(u.UNIONID,(function(e){n._unionid=e}));this._useOpenid?a.getStorage(u.OPENID,(function(t){n._openid=t;e&&e()})):e&&e()};n.prototype.setUseOpenid=function(e){this._useOpenid=e};n.prototype.setOpenid=function(e){if(!this._openid&&e){this._openid=e;a.setStorage(u.OPENID,e)}};n.prototype.setUnionid=function(e){if(!this._unionid&&e){this._unionid=e;a.setStorage(u.UNIONID,e)}};n.prototype.getIdTracking=function(){var t=e.prototype.getIdTracking.call(this);this._openid&&(t.openid=this._openid);this._unionid&&(t.unionid=this._unionid);this._userid&&(t.userid=this._userid);return t};n.prototype.getId=function(){return this._useOpenid?this._openid:this._uuid};return n}(function(){function e(){this._uuid="";this._userid="";this._provider="";this._idType=""}e.prototype.createUUID=function(){return f.getRandomStr(10)+Date.now()+f.getRandomStr(7)+u.UUID_SUFFIX};e.prototype.initUUID=function(e){var t=this;a.getStorage(u.UUID,(function(n){if(n)t._uuid=n;else{t._uuid=t.createUUID();a.setStorage(u.UUID,t._uuid)}e&&e(n)}))};e.prototype.initUserid=function(){var e=this;a.getStorage(u.USERID,(function(n){if(!e._userid&&n){e._userid=n;t().v("userId is ",n)}}));a.getStorage(u.PROVIDER,(function(n){if(!e._provider&&n){e._provider=n;t().v("provider is ",n)}}))};e.prototype.init=function(e){var t=this;t.initUUID((function(){t.initUserid();t.initID(e)}))};e.prototype.setUserid=function(e,t){if(!this._userid&&e){this._userid=e;this._provider=t;a.setStorage(u.USERID,e);a.setStorage(u.PROVIDER,t)}};e.prototype.removeUserid=function(){this._userid=void 0;this._provider=void 0;a.removeStorageSync(u.USERID);a.removeStorageSync(u.PROVIDER)};e.prototype.getUserId=function(){return this._userid};e.prototype.getProvider=function(){return this._provider};e.prototype.getIdType=function(){return this._idType};e.prototype.getIdTracking=function(){var e={};this._uuid&&(e.uuid=this._uuid);this._userid&&(e.userid=this._userid);return e};return e}())),l=(c=null,function(){c||(c=new p);return c}),d=function(){var e=null;function t(){var e=!1,t=null,n=[];this.addPageStart=function(n){if(n&&!e){t={ts:Date.now(),path:n,page_name:n};e=!0}};this.addPageEnd=function(i){if(e&&i&&t&&i===t.page_name){var r=Date.now()-t.ts;t.duration=Math.abs(r);n.push(t);t=null;e=!1}};this.get=function(){return n};this.getCurrentPage=function(){return t};this.clear=function(){n.length=0}}return function(){e||(e=new t);return e}}(),h={};var g=function(){var e=null,n=[],i="";function r(){return{add:function(e,r){t().v("share origin: %o",e);var o={title:e&&e.title,path:e&&e.path&&e.path.split("?")[0],_um_sts:Date.now()};o.path&&o.path.length>1&&f.startsWith(o.path,"/")&&(o.path=f.trimStart(o.path,"/"));var s=e.path||"",a=l().getId();if(a){var u=i.split(","),c=(u=u.filter((function(e){return e.length>0}))).indexOf(a);c>=0&&(u=u.slice(0,c));u.length<3&&u.push(a);var p=u.join(",");-1!==s.indexOf("?")?s+="&_um_ssrc="+p:s+="?_um_ssrc="+p;var d=Date.now();s+="&_um_sts="+d;if(r){var g=function(e){var t=[];for(var n in e)"_um_ssrc"!==n&&"_um_sts"!==n&&t.push(n+"="+e[n]);return t.join("&")}(h),v=g?g+"&_um_ssrc="+p+"&_um_sts="+d:"_um_ssrc="+p+"&_um_sts="+d;e.query=e.query?e.query+"&_um_ssrc="+p+"&_um_sts="+d:v}else e.path=s;o._um_ssrc=p;o._um_sts=d}n.push(o);t().v("share: %o",e);return e},setShareSource:function(e){i=e},clear:function(){n.length=0},get:function(){return n}}}return function(){e||(e=new r);return e}}(),v=function(e){if(e)try{return JSON.stringify(e)}catch(e){}return""},_=function(e){if(e)try{return JSON.parse(e)}catch(e){}return null},y=function(){var e=null,t="",i=null,r=!1;function o(){this.load=function(e){if(i){a.removeStorage(t);e()}else{t="um_cache_"+n().appKey();a.getStorage(t,(function(n){i=_(n)||{};r=!0;a.removeStorage(t);e()}))}};this.save=function(){i&&a.setStorage(t,v(i))};this.set=function(e,t){i&&(i[e]=t)};this.get=function(e){return(i||{})[e]};this.remove=function(e){i&&i[e]&&delete i[e]};this.getAll=function(){return i};this.clear=function(){i=null};this.has=function(e){return!!this.get(e)};this.isLoaded=function(){return r}}return function(){e||(e=new o);return e}}(),m="ekvs",S=function(){var e,n,i=[],r=[];function o(){if(i.length){var e=y().get(m);if(function(e){var t=0;for(var n in e)Array.isArray(e[n])&&(t+=e[n].length);return t}(e)+i.length<=1e4){e=s(e,i);y().set(m,e)}}}function s(e,t){var i=(e=e||{})[n];Array.isArray(i)&&i.length?e[n]=i.concat(t):e[n]=[].concat(t);return e}return function(){e||(e={addEvent:function(e){if(n){i.unshift(e);if(i.length>1){o();i.length=0}}else{t().w("session id is null: ",n);r.unshift(e)}},setSessionId:function(e){n=e;t().v("setSessionId: ",n);if(Array.isArray(r)&&r.length&&n){for(var i=0;i<r.length;i++)this.addEvent(r[i]);r.length=0}},getEkvs:function(){var e=y().get(m);i&&i.length&&(e=s(e,i));return e},clear:function(){y().remove(m);i.length=0}});return e}}(),I="2g",E="3g",O="4g",A="half_session",N="close_session",T="ekv",w=["access","access_subtype"],k=function(){var e=null;function t(){var e=!1,t={};function i(e){var i=y().get(u.IMPRINT);i&&(t.imprint=i);t.device_type="Phone";t.sdk_version=u.IMPL_VERSION;t.appkey=n().appKey();a.getDeviceInfo((function(e){t.device_info=e||""}));var r=a.getAppInfoSync();t.appid=r.appId;t.app_env=r.appEnv;t.app_version=r.appVersion;a.getSystemInfo((function(n){a.getNetworkInfo((function(i){var r=function(e,t){var n={};e=e||{};e.safeArea=e.safeArea||{};t=t||{};var i=t.networkType;"none"===i&&(i="unknown");var r=e.model||"",o=e.platform||"",s=e.brand||"",u=s.toLowerCase();n.sdk_type=a.getSdkType();n.platform=a.getPlatform();n.platform_sdk_version=e.platformSDKVersion;n.platform_version=e.platformVersion;n.resolution=e.resolution;n.pixel_ratio=e.pixelRatio;n.os=o;n.font_size_setting=e.fontSizeSetting;n.device_model=r;n.device_brand=s;n.device_manufacturer=u;n.device_manuid=r;n.device_name=r;n.os_version=e.OSVersion;n.language=e.language;n.theme=e.theme;n.benchmark_level=e.benchmarkLevel;n.status_bar_height=e.statusBarHeight;n.safe_area_top=e.safeArea.top;n.safe_area_left=e.safeArea.left;n.safe_area_right=e.safeArea.right;n.safe_area_bottom=e.safeArea.bottom;n.safe_area_height=e.safeArea.height;n.safe_area_width=e.safeArea.width;n.storage=e.storage;n.screen_width=e.screenWidth;n.screen_height=e.screenHeight;n.host=e.host;switch(i=i?i.toLowerCase():""){case O:n.access_subtype="LTE";n.access="4G";break;case E:n.access_subtype="CDMA";n.access="3G";break;case I:n.access_subtype="GRPS";n.access="2G";break;default:n.access=i;delete n.access_subtype}return n}(n,i);f.assign(t,r);e&&e()}))}))}return{init:function(){i((function(){e=!0}))},isLoaded:function(){return e},get:function(){return t},getRealtimeFields:function(){var e={};w.forEach((function(n){e[n]=t[n]}));return e},setIdTracking:function(e){this.setItem("id_tracking",e)},setIdType:function(e){this.setItem("id_type",e)},setAppVersion:function(e){this.setItem("app_version",e)},setSuperProperty:function(e){t.sp||(t.sp={});t.sp.isv=e},getSuperProperty:function(){return t&&t.sp?t.sp.isv:""},setItem:function(e,n){t[e]=n},getItem:function(e){return t[e]}}}return{instance:function(){e||(e=t());return e}}}(),b=function(){var e=null,n=null,i=null;function r(){return{resume:function(e){var r=!1;i||(i=y().get(u.CURRENT_SESSION));var o=new Date;n=o.getTime();if(!i||!i.end_time||n-i.end_time>u.SESSION_INTERVAL){r=!0;!function(e){try{var n=(i||{}).options||{},r=f.assign({},function(e){var n={};for(var i in e)0===i.indexOf("_um_")&&(n[i]=e[i]);t().v("query: ",e);t().v("_um_params: ",n);return n}(e.query));r.path=e.path||n.path;"gaode"!==a.getPlatform()&&(r.scene=e.scene?a.getPlatform()+"_"+e.scene:n.scene);var o=e.referrerInfo;o&&(r.referrerAppId=o.appId);t().v("session options: ",r);var s=r[u.UM_SSRC];s&&g().setShareSource(s);var c=Date.now();i={id:f.getRandomStr(10)+c,start_time:c,options:r}}catch(e){t().e("生成新session失败: ",e)}}(e);t().v("开始新的session(%s): ",i.id,i)}else t().v("延续上一次session(%s): %s ",i.id,o.toLocaleTimeString(),i);return r},pause:function(){!function(){if(i){var e=new Date;i.end_time=e.getTime();"number"!=typeof i.duration&&(i.duration=0);i.duration=i.end_time-n;y().set(u.CURRENT_SESSION,i);t().v("退出会话(%s): %s ",i.id,e.toLocaleTimeString(),i)}}()},getCurrentSessionId:function(){return(i||{}).id},getCurrentSession:function(){return i},cloneCurrentSession:function(){return f.clone(i)}}}return function(){e||(e=r());return e}}();function D(e){var t=null;switch(e){case A:t=function(){var e=null,t=b().cloneCurrentSession();t&&(e={header:{st:"1"},analytics:{sessions:[t]}});return e}();break;case N:t=function(){var e=null,t={},n=b().cloneCurrentSession();if(n){var i=d().get(),r=g().get();Array.isArray(i)&&i.length&&(n.pages=f.clone(i));Array.isArray(r)&&r.length&&(n.shares=f.clone(r));d().clear();g().clear();t.sessions=[n]}var o=S().getEkvs();if(o){t.ekvs=f.clone(o);S().clear()}(t.sessions||t.ekvs)&&(e={analytics:t});return e}();break;case T:t=function(){var e=null,t=S().getEkvs();if(t){e={analytics:{ekvs:f.clone(t)}};S().clear()}return e}()}return t}var R={sessions:"sn",ekvs:"e",active_user:"active_user"},U={sdk_type:"sdt",access:"ac",access_subtype:"acs",device_model:"dm",language:"lang",device_type:"dt",device_manufacturer:"dmf",device_name:"dn",platform_version:"pv",id_type:"it",font_size_setting:"fss",os_version:"ov",device_manuid:"did",platform_sdk_version:"psv",device_brand:"db",appkey:"ak",_id:"id",id_tracking:"itr",imprint:"imp",sdk_version:"sv",resolution:"rl",testToken:"ttn",theme:"t5",benchmark_level:"bml",screen_width:"sw",screen_height:"sh",status_bar_height:"sbh",safe_area_top:"sat",safe_area_left:"sal",safe_area_right:"sar",safe_area_bottom:"sab",safe_area_height:"sah",safe_area_width:"saw",pixel_ratio:"pr",storage:"s7",host:"hs"},P={uuid:"ud",unionid:"und",openid:"od",anonymousid:"nd",alipay_id:"ad",device_id:"dd",userid:"puid"};function L(e,t){var n=C(e,t);e&&e.id_tracking&&(n[t.id_tracking||"id_tracking"]=C(e.id_tracking,P));return n}function C(e,t){var n={};for(var i in e)t[i]?n[t[i]]=e[i]:n[i]=e[i];return n}function M(e,t){var n={};if(e)for(var i in e)e[i]&&(n[t[i]]=e[i]);return n}var x="";function V(){return x}var j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",G=function(e){for(var t={},n=0,i=e.length;n<i;n++)t[e.charAt(n)]=n;return t}(j),K=String.fromCharCode,F=function(e){if(e.length<2){return(t=e.charCodeAt(0))<128?e:t<2048?K(192|t>>>6)+K(128|63&t):K(224|t>>>12&15)+K(128|t>>>6&63)+K(128|63&t)}var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return K(240|t>>>18&7)+K(128|t>>>12&63)+K(128|t>>>6&63)+K(128|63&t)},q=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,H=function(e){var t=[0,2,1][e.length%3],n=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0);return[j.charAt(n>>>18),j.charAt(n>>>12&63),t>=2?"=":j.charAt(n>>>6&63),t>=1?"=":j.charAt(63&n)].join("")},B=function(e){return t=function(e){return e.replace(q,F)}(e),t.replace(/[\s\S]{1,3}/g,H);var t},Y=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g"),W=function(e){switch(e.length){case 4:var t=((7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3))-65536;return K(55296+(t>>>10))+K(56320+(1023&t));case 3:return K((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return K((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},J=function(e){var t=e.length,n=t%4,i=(t>0?G[e.charAt(0)]<<18:0)|(t>1?G[e.charAt(1)]<<12:0)|(t>2?G[e.charAt(2)]<<6:0)|(t>3?G[e.charAt(3)]:0),r=[K(i>>>16),K(i>>>8&255),K(255&i)];r.length-=[0,0,2,1][n];return r.join("")},X=function(e){return t=function(e){return e.replace(/[\s\S]{1,4}/g,J)}(e),t.replace(Y,W);var t},z=function(e,t){return t?B(String(e)).replace(/[+\/]/g,(function(e){return"+"==e?"-":"_"})).replace(/=/g,""):B(String(e))},Q=function(e){return X(String(e).replace(/[-_]/g,(function(e){return"-"==e?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,""))};var Z=new function(){var e="",t=this;this.set=function(t){e=t};this.get=function(){return e};this.getImpObj=function(){return _(Q(e))};this.getItem=function(e){var n=t.getImpObj();return n&&n[e]||""};this.load=function(){e=y().get(u.IMPRINT)};this.save=function(){e&&y().set(u.IMPRINT,e)}};function $(e,n,i,r){k.instance().setIdType(l().getIdType());k.instance().setIdTracking(l().getIdTracking());var o=l().getUserId();o&&e.analytics&&(e.analytics.active_user={puid:o,provider:l().getProvider()});var s=f.clone(k.instance().get());e.header=f.assign(s,e.header,{ts:Date.now(),testToken:V(),traceId:f.getRandomStr(10)+Date.now()+f.getRandomStr(9)});var c,p=function(e){return{h:L(e.header,U),a:M(e.analytics,R)}}(e),d=v(p);c=p;var h={url:u.ENDPOINT+u.LOG_URL,method:"POST",data:c,success:function(r){var o=r.code||r.status||r.statusCode;if(200===o||413===o){t().i("数据发送成功: ",e,d);!function(e){if(e){k.instance().setItem(u.IMPRINT,e);Z.set(e);Z.save();t().v("imprint: ",Z.getImpObj());Z.getItem("ttn_invalid")&&(x="")}}((r.data||{}).imprint);"function"==typeof n&&n(r)}else{t().w("数据发送失败: ",d);"function"==typeof i&&i()}},fail:function(e){t().w("超时: ",d);"function"==typeof i&&i()},complete:function(){"function"==typeof r&&r()}};a.request(f.assign(h,{header:{"Msg-Type":a.getSdkType()+"/json","disable-base64":"Y","content-type":"application/json"}}))}function ee(e){var t=e,n=[];this.enqueue=function(e){"number"==typeof t&&this.size()>=t&&this.dequeue();n.push(e)};this.dequeue=function(){return n.shift()};this.front=function(){return n[0]};this.isEmpty=function(){return 0===n.length};this.clear=function(){n.length=0};this.size=function(){return n.length};this.items=function(){return n};this.print=function(){console.log(n.toString())}}var te=function(){var e=null,n=!1,i=[],r=new ee(50);function o(e,t,n){if(k.instance().isLoaded()){t=t||{};var i=D(e);if(i){var s=k.instance().getRealtimeFields();i.header=f.assign({},i.header,s);i.noCache=t.noCache;r.enqueue(i)}"function"==typeof n&&n()}else setTimeout((function(){o(e,t,n)}),100)}function s(e){var t=r.front();if(t)$(t,(function(){r.dequeue();s(e)}),(function(){var t=r.dequeue();t&&!t.noCache&&i.push(t);s(e)}));else{!function(){i.forEach((function(e){r.enqueue(e)}));i.length=0}();e()}}function a(e){if(l().getId())if(n)t().i("队列正在发送中");else{n=!0;s((function(){n=!1;"function"==typeof e&&e()}))}else{t().i("获取id标识失败,暂缓发送");"function"==typeof e&&e()}}function c(){this.send=function(e,t,n){e?this.add(e,t,(function(){a(n)})):a(n)};this.add=function(e,t,n){o(e,t,n)};this.load=function(){var e=y().get(u.REQUESTS);e&&e.length&&e.forEach((function(e){r.enqueue(e)}));y().remove(u.REQUESTS)};this.save=function(){y().set(u.REQUESTS,f.clone(r.items()));r.clear()}}return function(){e||(e=new c);return e}}(),ne=function(){var e=null,i=null;function r(){this.setUserInfo=function(e){i=e};this.update=function(){e(i)||a.getUserInfo((function(t){e(t)}))};function e(e){if(e&&"object"==typeof e){var i=y().get(u.USER_INFO);i&&f.deepEqual(e,i)||function(e,i){var r=n().appKey(),o=a.getSdkType(),s=l().getId(),c=l().getIdType();if(!(r&&o&&s&&c))return;var f={ak:n().appKey(),sdt:a.getSdkType(),uin:e.nickName,uia:e.avatar||e.avatarUrl,uig:e.gender,uit:e.country,uip:e.province,uic:e.city,uil:e.language,id:l().getId(),it:l().getIdType(),age:e.age,cln:e.constellation},p=JSON.stringify(f);p=z(p);a.request({url:u.ENDPOINT+u.USERINFO_URL,method:"POST",header:{"content-type":"application/x-www-form-urlencoded"},data:"ui="+p,success:function(n){t().v("用户信息上传成功: ",e);i&&i(n&&n.data&&200===n.data.code)},fail:function(){t().e("用户信息上传失败: ",e);i&&i(!1)}})}(e,(function(t){t&&y().set(u.USER_INFO,e)}));return!0}return!1}}return function(){e||(e=new r);return e}}();function ie(e,t){this.id=e;this.ts=Date.now();var n=typeof t;if("string"===n&&t)this[e]=t;else if("object"===n)for(var i in t)({}).hasOwnProperty.call(t,i)&&(this[i]=t[i])}function re(){var e=!1,i=!1,r=0;this.init=function(i){t().v("sdk version: "+u.IMPL_VERSION);e?t().v("Lib重复实例化"):y().load((function(){t().v("cache初始化成功: ",y().getAll());!function(){l().setUseOpenid&&l().setUseOpenid(n().useOpenid());l().init((function(){k.instance().init();t().v("Header初始化成功")}))}();e=!0;"function"==typeof i&&i();t().tip("SDK集成成功")}))};this.resume=function(r){if(e&&!i){t().v("showOptions: ",r);var o;i=!0;n().enableVerify()&&r&&r.query&&(o=r.query._ttn,x=o||x);this._resume(r)}};this._resume=function(e){te().load();var i=b().resume(e),r=b().getCurrentSessionId();S().setSessionId(r);i&&te().add(A,{},(function(){l().setUseOpenid&&l().setUseOpenid(n().useOpenid());if(n().useOpenid()&&n().autoGetOpenid()&&!l().getId()){t().v("get id async");o(10,3e3)}else{t().v("session auto send");te().send()}}));function o(e,i){l().getId()||e<=0||l().getOpenIdAsync(n().appKey(),(function(n){if(n){t().v("获取id成功");te().send()}else{t().v("获取openid失败,启动重试,剩余可用次数",e-1);setTimeout((function(){o(e-1,i)}),i)}}))}};this.pause=function(o){if(e){i=!1;r=0;b().pause();n().uploadUserInfo()&&ne().update();te().send(N,{},(function(){te().save();y().save();t().v("cache save success");"function"==typeof o&&o()}))}};this.setOpenid=function(e){t().v("setOpenId: %s",e);l().setOpenid(e);te().send()};this.setUnionid=function(e){t().v("setUnionid: %s",e);l().setUnionid(e)};this.setUserid=function(e,n){t().v("setUserid: %s",e,n);l().setUserid(e,n)};this.removeUserid=function(){t().v("removeUserid");l().removeUserid()};this.setUserInfo=function(e){t().v("setUserInfo: %s",e);ne().setUserInfo(e)};this.setAnonymousid=function(e){t().v("setAnonymousId: %s",e);l().setAnonymousid(e);te().send()};this.setAppVersion=function(e){e&&"string"!=typeof e?t().w("setAppVersion方法只接受字符串类型参数"):k.instance().setAppVersion(e)};this.setAlipayUserid=function(e){if(e&&"string"!=typeof e)t().w("setAlipayUserid方法只接受字符串类型参数");else{t().v("setAlipayUserid: %s",e);l().setAlipayUserid(e)}};this.setDeviceId=function(e){if("string"==typeof e){l().setDeviceId(e);return e}};this.setSuperProperty=function(e){if(e&&"string"!=typeof e)t().w("超级属性只支持字符串类型");else{var n=this;if(k.instance().getSuperProperty()!==e){k.instance().setSuperProperty(e);n.pause((function(){n.resume()}))}}};this.trackEvent=function(n,i){if(e){t().v("event: ",n,i);if(function(e,n){if(!e||"string"!=typeof e){t().e('please check trackEvent id. id should be "string" and not null');return!1}var i=["id","ts","du"],r={};i.forEach((function(e){r[e]=1}));if(r[e]){t().e("eventId不能与以下保留字冲突: "+i.join(","));return!1}if(e.length>u.MAX_EVENTID_LENGTH){t().e("The maximum length of event id shall not exceed "+u.MAX_EVENTID_LENGTH);return!1}if(n&&("object"!=typeof n||Array.isArray(n))&&"string"!=typeof n){t().e("please check trackEvent properties. properties should be string or object(not include Array)");return!1}if("object"==typeof n){var o=0;for(var s in n)if({}.hasOwnProperty.call(n,s)){if(s.length>u.MAX_PROPERTY_KEY_LENGTH){t().e("The maximum length of property key shall not exceed "+u.MAX_PROPERTY_KEY_LENGTH);return!1}if(o>=u.MAX_PROPERTY_KEYS_COUNT){t().e("The maximum count of properties shall not exceed "+u.MAX_PROPERTY_KEYS_COUNT);return!1}if(r[s]){t().e("属性中的key不能与以下保留字冲突: "+i.join(","));return!1}o+=1}}return!0}(n,i)){var o=new ie(n,i);S().addEvent(o);var s=!!V(),a=s?0:u.EVENT_SEND_DEFAULT_INTERVAL,c=Date.now();if(function(e,t){return"number"!=typeof r||"number"!=typeof t||r<=0||e-r>t}(c,a)){r=c;te().send(T,{noCache:s},(function(){}))}}}};this.trackShare=function(n){if(e)try{if(a.getSdkType().indexOf("game")>-1){n=g().add(n,!0);t().v("shareQuery: ",n)}else{n=g().add(n,!1);t().v("sharePath: ",n.path)}}catch(e){t().v("shareAppMessage: ",e)}return n};this.trackPageStart=function(t){e&&d().addPageStart(t)};this.trackPageEnd=function(t){e&&d().addPageEnd(t)};this.onShareAppMessage=function(e){var t=this;a.onShareAppMessage((function(){return t.trackShare(e())}))};this.shareAppMessage=function(e){this.trackShare(e);a.shareAppMessage(e)}}var oe=[];function se(){}se.prototype={createMethod:function(e,n,i){try{e[n]=i&&i[n]?function(){return i[n].apply(i,arguments)}:function(){oe.push([n,[].slice.call(arguments)])}}catch(e){t().v("create method errror: ",e)}},installApi:function(e,n){try{var i,r,o="resume,pause,trackEvent,trackPageStart,trackPageEnd,trackShare,setUserid,setOpenid,setUnionid,onShareAppMessage,shareAppMessage".split(",");for(i=0,r=o.length;i<r;i++)this.createMethod(e,o[i],n);if(n)for(i=0,r=oe.length;i<r;i++){var s=oe[i];try{n[s[0]].apply(n,s[1])}catch(e){t().v("impl[v[0]].apply error: ",s[0],e)}}}catch(e){t().v("install api errror: ",e)}}};var ae=[u.ENDPOINT,u.ENDPOINTB];function ue(e,n){var i,r;0===e||1===e&&n?i=u.ENDPOINT:2===e&&n?i=u.ENDPOINTB:n&&(i=ae[e]);if(e>=ae.length||n){n&&(r=i,u.ENDPOINT=r);n&&t().v("命中可用服务",i);!n&&t().tip_w("未命中可用服务");return!1}a.request({url:u.ENDPOINT+"/uminiprogram_logs/ckdh",success:function(t){200===(t.code||t.status||t.statusCode)&&t.data&&200===t.data.code?ue(e+1,!0):ue(e+1,!1)},fail:function(){ue(e+1,!1)}})}var ce={init:function(e){u.ENDPOINTB&&setTimeout((function(){ue(0,!1)}),e)}},fe=new se,pe={_inited:!1,_log:t(),preinit:function(e){if(e&&"object"==typeof e)for(var t in e)u[t]=e[t];return u},use:function(e,t){e&&f.isFunction(e.install)?e.install(pe,t):f.isFunction(e)&&e(pe,t);return pe},messager:r,init:function(e){if(this._inited)t().v("已经实例过,请避免重复初始化");else if(e)if(e.appKey){"boolean"!=typeof e.useOpenid&&(e.useOpenid=!0);n().set(e);t().setDebug(e.debug);this._inited=!0;var i=this;r.emit(r.messageType.CONFIG_LOADED,e);try{var o=new re;t().v("成功创建Lib对象");0;o.init((function(){t().v("Lib对象初始化成功");fe.installApi(i,o);t().v("安装Lib接口成功");r.emit(r.messageType.UMA_LIB_INITED,e)}));ce.init(3e3)}catch(e){t().w("创建Lib对象异常: "+e)}}else t().err("请确保传入正确的appkey");else t().err("请正确设置相关信息!")}};try{fe.installApi(pe,null)}catch(e){t().w("uma赋值异常: ",e)}var le={FETCH_URL:"https://ucc.umeng.com/v1/mini/fetch",ABLOG_URL:"https://pslog.umeng.com/mini_ablog",SDK_VERSION:"2.8.2",MOBILE_NETWORK_NONE:"none",MOBILE_NETWORK_2G:"2g",MOBILE_NETWORK_3G:"3g",MOBILE_NETWORK_4G:"4g",MOBILE_NETWORK_5G:"5g",MOBILE_NETWORK_WIFI:"wifi",IMPRINT:"imprint"},de={},he=Array.isArray;de.isArray=he||function(e){return"[object Array]"===toString.call(e)};de.isObject=function(e){return e===Object(e)&&!de.isArray(e)};de.isEmptyObject=function(e){if(de.isObject(e)){for(var t in e)if(hasOwnProperty.call(e,t))return!1;return!0}return!1};de.isUndefined=function(e){return void 0===e};de.isString=function(e){return"[object String]"===toString.call(e)};de.isDate=function(e){return"[object Date]"===toString.call(e)};de.isNumber=function(e){return"[object Number]"===toString.call(e)};de.each=function(e,t,n){if(null!=e){var i={},r=Array.prototype.forEach;if(r&&e.forEach===r)e.forEach(t,n);else if(e.length===+e.length){for(var o=0,s=e.length;o<s;o++)if(o in e&&t.call(n,e[o],o,e)===i)return}else for(var a in e)if(hasOwnProperty.call(e,a)&&t.call(n,e[a],a,e)===i)return}};de.buildQuery=function(e,t){var n,i,r=[];void 0===t&&(t="&");de.each(e,(function(e,t){n=encodeURIComponent(e.toString());i=encodeURIComponent(t);r[r.length]=i+"="+n}));return r.join(t)};de.JSONDecode=function(e){if(e){try{return JSON.parse(e)}catch(e){console.error("JSONDecode error",e)}return null}};de.JSONEncode=function(e){try{return JSON.stringify(e)}catch(e){console.error("JSONEncode error",e)}};var ge=Object.create(null);function ve(e){t().v("开始构建 fetch body");a.getSystemInfo((function(t){a.getNetworkInfo((function(i){var r=(i=i||{}).networkType;r=r===le.MOBILE_NETWORK_NONE?"unknown":r.toUpperCase();ge.access=r;!function(e,t){var i=e.brand||"";ge.deviceType="Phone";ge.sdkVersion=le.SDK_VERSION;ge.appkey=n().appKey();ge.sdkType=a.getSdkType();ge.umid=l().getId();if(e){ge.language=e.language||"";ge.os=e.OS;ge.osVersion=e.OSVersion;ge.deviceName=e.deviceName;ge.platformVersion=e.platformVersion;ge.platformSdkVersion=e.platformSDKVersion;ge.deviceBrand=i;var r=e.resolution.split("*");if(de.isArray(r)){ge.resolutionHeight=Number(r[0]);ge.resolutionWidth=Number(r[1])}}!function(e){if(e){ge.installTime=e.install_datetime&&Date.parse(e.install_datetime);ge.scene=e.install_scene;ge.channel=e.install_channel;ge.campaign=e.install_campaign}}(Z.getImpObj());t&&t(ge)}(t,e)}))}))}var _e=Object.create(null),ye=null,me=!1,Se={minFetchIntervalSeconds:43200};function Ie(e){e&&de.each(e,(function(e){_e[e.k]=e}))}function Ee(){var e=this;this.STORAGE_NAME=null;r.once(r.messageType.CONFIG_LOADED,(function(n){t().v("云配初始化开始...");e.init(n)}))}Ee.prototype={setDefaultValues:function(e){me&&de.isObject(e)&&de.each(e,(function(e,t){_e[t]&&_e[t].v||(_e[t]={v:e})}))},getValue:function(e){t().v("从配置项中读取 value, 当前配置为: ",_e);t().v("待读取的 key : ",e);try{if(!me)return;var i=_e[e]||{};t().v("读取相应配置ing..., 结果为: ",i);if(de.isNumber(i.e)&&de.isNumber(i.g)){t().v("读取到相应配置, 开始数据上报...");!function(e){var i={appkey:n().appKey(),sdkType:a.getSdkType(),expId:e&&e.e,groupId:e&&e.g,clientTs:Date.now(),key:e&&e.k,value:e&&e.v,umid:l().getId()};try{a.request({url:le.ABLOG_URL,method:"POST",data:[i],success:function(e){e&&200===e.statusCode?t().v("上传数据成功",i):t().w("ablog 请求成功, 返回结果异常 ",e)},fail:function(e){t().w("ablog 请求数据错误 ",i,e)}})}catch(e){t().w("urequest 调用错误",e)}}(i)}return i.v}catch(n){t().w("getValue error, key: ",e)}},active:function(e){try{if(!me)return;var n,i;e&&e.params&&(n=e.params);e&&e.callback&&(i=e.callback);t().v("激活配置项: ",n);if(n){t().v("本地已缓存的配置项: ",_e);Ie(n);t().v("合并后的配置项: ",_e);i&&i(_e);t().v("active 结束")}else{t().v("配置项为空!! 读取本地配置...");a.getStorage(this.STORAGE_NAME,(function(e){if(e){Ie((e=de.JSONDecode(e)||{}).params);t().v("当前本地配置项为: ",_e);i&&i(_e);t().v("active 结束")}else t().v("当前本地配置项为空, 退出激活")}))}}catch(e){t().w("SDK active 错误",e)}},init:function(e){if(e.appKey){ye=e.appKey;this.STORAGE_NAME="um_remote_config_{{"+ye+"}}"}if(ye)if(me)t().w("SDK 已经初始化, 请避免重复初始化");else{me=!0;this.setOptions(e);this.active()}else t().err("请检查您的小程序 appKey, appKey 不能为空")},setOptions:function(e){if(de.isObject(e)){var t=e.minFetchIntervalSeconds;de.isNumber(t)&&(Se.minFetchIntervalSeconds=Math.max(t,5))}},fetch:function(e){if(me&&this.STORAGE_NAME){var n,i;e&&e.active&&(n=e.active);e&&e.callback&&(i=e.callback);var r=this;a.getStorage(this.STORAGE_NAME,(function(e){t().v("开始读缓存 data is ",e);if((e=de.JSONDecode(e)||{}).params&&e.ts&&Date.now()-e.ts<1e3*Se.minFetchIntervalSeconds){t().v("缓存数据存在, 并且本次触发时间距离上次fetch触发时间未超过 fetch 时间间隔, 无需 fetch");i&&i(e.params)}else ve((function(e){t().v("缓存数据不存在, 构建 fetch body :",e);try{a.request({url:le.FETCH_URL,method:"POST",data:e,success:function(e){if(e&&200===e.statusCode&&e.data&&e.data.cc){t().v("fetch 请求成功, 响应数据: ",e.data);var o=Object.create(null);de.each(e.data.cc,(function(e){o[e.k]=e}));var s={ts:Date.now(),params:o};t().v("开始缓存 fetch 请求的云配置结果...");a.setStorage(r.STORAGE_NAME,de.JSONEncode(s),(function(e){t().v("缓存云配置成功, 缓存数据为: ",s);t().v("缓存云配置成功, 成功消息为: ",e);t().v("云配拉取数据是否自动激活: ",n);if(e&&n){t().v("激活云配置...");r.active({params:o,callback:i})}}))}else{t().w("fetch 请求成功,返回结果异常 ",e.data);i&&i()}},fail:function(n){t().w("fetch请求数据错误 ",e,n);i&&i()}})}catch(e){t().w("urequest调用错误",e)}}))}))}}};var Oe={install:function(e,t){e.rc||(e.rc=new Ee);e.messager.once(e.messager.messageType.CONFIG_LOADED,(function(){e._log.v("plugin rc installed")}));return e.rc}},Ae=".",Ne="_um",Te="revenue",we="stage",ke="level",be="running",De="end",Re="init",Ue="set",Pe=[Ne,we,"start"].join(Ae);function Le(e){var t={};for(var n in e){var i=e[n];if("object"==typeof i)for(var r in i)t[n+Ae+r]=i[r];else t[n]=i}return t}var Ce={install:function(e,t){e.revenue=function(t){e.trackEvent([Ne,Te,t.group].join(Ae),Le(t))};var n=0;e.stage={onStart:function(t){n=Date.now();e.trackEvent(Pe,Le(t))},onEnd:function(t){"number"!=typeof t._um_sdu&&(t._um_sdu=0!==n?Date.now()-n:0);e.trackEvent([Ne,we,De,t.event].join(Ae),Le(t))},onRunning:function(t){e.trackEvent([Ne,we,be,t.event].join(Ae),Le(t))}};e.level={onInitLevel:function(t){e.trackEvent([Ne,ke,Re].join(Ae),Le(t))},onSetLevel:function(t){e.trackEvent([Ne,ke,Ue].join(Ae),Le(t))}};e.messager.once(e.messager.messageType.CONFIG_LOADED,(function(){e._log.v("plugin game-ext installed")}));return e}};(typeof wx!=="undefined")&&wx.onShow((function(e){t().v("game onShow: ",e);n=e.query,h=n;var n;pe.resume(e,!0)}));(typeof wx!=="undefined")&&wx.onHide((function(){t().v("game onHide");pe.pause()}));var Me=pe.init;pe.init=function(e){if(e&&e.useOpenid){t().tip_w(t().repeat("!"));t().tip_w("您选择了使用openid进行统计,请确保使用setOpenid回传openid或通过设置autoGetOpenid为true,并在友盟后台设置secret由友盟帮您获取");t().tip_w(t().repeat("!"))}Me.call(pe,e)};pe.use(Oe);pe.use(Ce);(typeof wx!=="undefined")&&(wx.uma=pe)
|
|
16
|
-
|
|
17
|
-
// ============================================
|
|
18
|
-
// TypeScript 类型声明
|
|
19
|
-
// ============================================
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* 友盟初始化配置(官网接口)
|
|
23
|
-
*/
|
|
24
|
-
export interface UmaInitConfig {
|
|
25
|
-
/** 应用 appKey(必填) */
|
|
26
|
-
appKey: string;
|
|
27
|
-
/** 是否使用 openid 统计,默认 true */
|
|
28
|
-
useOpenid?: boolean;
|
|
29
|
-
/** 是否自动获取 openid,需在友盟后台配置 secret */
|
|
30
|
-
autoGetOpenid?: boolean;
|
|
31
|
-
/** 是否开启调试模式 */
|
|
32
|
-
debug?: boolean;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* 友盟 SDK 接口定义
|
|
37
|
-
*
|
|
38
|
-
* 注意:仅包含实际可用的方法(共12个)
|
|
39
|
-
* - 不可用方法(定义在 re 类但未代理到 pe):removeUserid, setUserInfo, setAnonymousid, setAppVersion, setSuperProperty
|
|
40
|
-
* - 插件方法(通过 pe.use 安装,已移除):revenue, stage, level, rc
|
|
41
|
-
* - 不可用方法(定义在 re 类但未代理到 pe):removeUserid, setUserInfo, setAnonymousid,
|
|
42
|
-
* setAppVersion, setSuperProperty
|
|
43
|
-
* - 插件方法(通过 pe.use 安装):revenue, stage, level, rc(已移除,不在接口中)
|
|
44
|
-
*/
|
|
45
|
-
export interface UmaSDK {
|
|
46
|
-
/** 初始化 */
|
|
47
|
-
init(config: UmaInitConfig): void;
|
|
48
|
-
/** 恢复会话(onShow 时调用) */
|
|
49
|
-
resume(options?: any): void;
|
|
50
|
-
/** 暂停会话(onHide 时调用) */
|
|
51
|
-
pause(): void;
|
|
52
|
-
/** 上报自定义事件 */
|
|
53
|
-
trackEvent(eventName: string, params?: object | string): void;
|
|
54
|
-
/** 上报分享 */
|
|
55
|
-
trackShare(shareOptions: object): object;
|
|
56
|
-
/** 页面开始 */
|
|
57
|
-
trackPageStart(pageName: string): void;
|
|
58
|
-
/** 页面结束 */
|
|
59
|
-
trackPageEnd(pageName: string): void;
|
|
60
|
-
/** 设置 openid */
|
|
61
|
-
setOpenid(openid: string): void;
|
|
62
|
-
/** 设置 unionid */
|
|
63
|
-
setUnionid(unionid: string): void;
|
|
64
|
-
/** 设置用户 ID */
|
|
65
|
-
setUserid(userid: string, provider?: string): void;
|
|
66
|
-
/** 注册分享回调 */
|
|
67
|
-
onShareAppMessage(callback: () => object): void;
|
|
68
|
-
/** 调用分享 */
|
|
69
|
-
shareAppMessage(options: object): void;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// ============================================
|
|
73
|
-
// 导出
|
|
74
|
-
// ============================================
|
|
75
|
-
|
|
76
|
-
export const uma: UmaSDK = pe as any;
|