Files
JiaZhiQianYan/unpackage/dist/dev/mp-weixin/utils/posthog.js
2025-11-26 17:19:38 +08:00

136 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
const common_vendor = require("../common/vendor.js");
class PostHogTracker {
constructor(config) {
this.apiHost = config.apiHost || "https://us.i.posthog.com";
this.apiKey = config.apiKey;
this.distinctId = null;
}
// 初始化并获取用户唯一标识
init() {
const storedId = common_vendor.index.getStorageSync("posthog_distinct_id");
if (storedId) {
this.distinctId = storedId;
} else {
this.distinctId = this._generateUUID();
common_vendor.index.setStorageSync("posthog_distinct_id", this.distinctId);
}
return this;
}
// 设置用户 ID登录后调用
identify(userId, userProperties = {}) {
this.distinctId = userId;
common_vendor.index.setStorageSync("posthog_distinct_id", userId);
this._capture("$identify", {
$set: userProperties
});
}
// 捕获事件
capture(eventName, properties = {}) {
this._capture(eventName, properties);
}
// 页面浏览事件
pageView(pagePath, pageTitle) {
this._capture("$pageview", {
$current_url: pagePath,
$title: pageTitle
});
}
// 内部发送方法
_capture(event, properties = {}) {
const payload = {
api_key: this.apiKey,
event,
distinct_id: this.distinctId,
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
properties: {
...properties,
$lib: "uniapp-miniprogram",
$lib_version: "1.0.0",
...this._getDefaultProperties()
}
};
common_vendor.index.request({
url: `${this.apiHost}/i/v0/e/`,
method: "POST",
header: {
"Content-Type": "application/json"
},
data: payload,
success: (res) => {
common_vendor.index.__f__("log", "at utils/posthog.js:71", "PostHog event captured:", event);
},
fail: (err) => {
common_vendor.index.__f__("error", "at utils/posthog.js:74", "PostHog capture failed:", err);
this._saveFailedEvent(payload);
}
});
}
// 批量发送事件(性能优化)
captureBatch(events) {
const payload = events.map((e) => ({
api_key: this.apiKey,
event: e.event,
distinct_id: this.distinctId,
timestamp: e.timestamp || (/* @__PURE__ */ new Date()).toISOString(),
properties: {
...e.properties,
...this._getDefaultProperties()
}
}));
common_vendor.index.request({
url: `${this.apiHost}/batch/`,
method: "POST",
header: {
"Content-Type": "application/json"
},
data: payload,
success: (res) => {
common_vendor.index.__f__("log", "at utils/posthog.js:102", "PostHog batch captured:", events.length, "events");
}
});
}
// 获取默认属性
_getDefaultProperties() {
const systemInfo = common_vendor.index.getSystemInfoSync();
return {
$os: systemInfo.platform,
$os_version: systemInfo.system,
$device: systemInfo.model,
$screen_height: systemInfo.screenHeight,
$screen_width: systemInfo.screenWidth,
mp_platform: "uniapp"
};
}
// 生成 UUID
_generateUUID() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
const r = Math.random() * 16 | 0;
const v = c === "x" ? r : r & 3 | 8;
return v.toString(16);
});
}
// 保存失败事件(离线支持)
_saveFailedEvent(payload) {
const failedEvents = common_vendor.index.getStorageSync("posthog_failed_events") || [];
failedEvents.push(payload);
common_vendor.index.setStorageSync("posthog_failed_events", failedEvents);
}
// 重试发送失败的事件
retryFailedEvents() {
const failedEvents = common_vendor.index.getStorageSync("posthog_failed_events") || [];
if (failedEvents.length > 0) {
this.captureBatch(failedEvents);
common_vendor.index.removeStorageSync("posthog_failed_events");
}
}
}
const posthog = new PostHogTracker({
apiHost: "https://us.i.posthog.com",
// 或 eu.i.posthog.com
apiKey: "YOUR_PROJECT_API_KEY"
// 在 PostHog 项目设置中获取
}).init();
exports.posthog = posthog;
//# sourceMappingURL=../../.sourcemap/mp-weixin/utils/posthog.js.map