Files
2026-01-09 11:24:40 +08:00

118 lines
3.2 KiB
JavaScript
Raw Permalink 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.
import { request } from "@/utils/request"
// 生成并缓存 device_id
function getOrCreateDeviceId() {
let deviceId = uni.getStorageSync('device_id')
if (!deviceId) {
deviceId = Date.now() + '_' + Math.random().toString(36).substr(2, 9)
uni.setStorageSync('device_id', deviceId)
}
return deviceId
}
// 获取网络类型
function getNetworkType() {
return new Promise((resolve) => {
uni.getNetworkType({
success: (res) => resolve(res.networkType || 'unknown'),
fail: () => resolve('unknown')
})
})
}
// 获取系统平台
function getSystemInfo() {
return new Promise((resolve) => {
uni.getSystemInfo({
success: (res) => resolve(res),
fail: () => resolve({})
})
})
}
// 获取当前页面路径
function getCurrentPagePath() {
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
return currentPage?.route || ''
}
function getMiniProgramVersion() {
const platform = process.env.UNI_PLATFORM
let version = ''
let envVersion = ''
try {
if (platform === 'mp-weixin') {
// 微信小程序
const info = wx.getAccountInfoSync()
version = info?.miniProgram?.version || ''
envVersion = info?.miniProgram?.envVersion || ''
} else if (platform === 'mp-alipay') {
// 支付宝小程序
const info = my.getAppInfoSync()
version = info?.version || ''
} else if (platform === 'mp-toutiao' || platform === 'mp-jd') {
// 抖音/头条/京东小程序
const info = tt.getAccountInfoSync?.()
version = info?.miniProgram?.version || ''
envVersion = info?.miniProgram?.envVersion || ''
} else if (platform === 'mp-baidu') {
// 百度小程序(无标准方法获取版本号)
version = '' // 百度不支持获取版本号
} else {
version = ''
}
} catch (e) {
version = ''
envVersion = ''
}
return {
platform, // 当前小程序平台
version, // 小程序版本号
envVersion // develop / trial / release微信等支持
}
}
// 构造埋点对象
async function buildEventData(eventName, eventType = 'click', customParams = {}) {
const deviceId = getOrCreateDeviceId()
const systemInfo = await getSystemInfo()
const networkType = await getNetworkType()
// const location = await getLocation()
const appVersion = (typeof plus !== 'undefined') ? plus?.runtime?.version : ''
const { envVersion, platform, version} = getMiniProgramVersion()
return {
userId: uni.getStorageSync('user_id') || null,
deviceId: deviceId,
eventName: eventName,
eventType: eventType,
eventTime: new Date(),
page: getCurrentPagePath(),
elementId: customParams.element_id || null,
elementContent: customParams.element_content || null,
customParams: customParams,
networkType: networkType,
os: systemInfo.platform || 'unknown',
appVersion: version || 'unknown',
envVersion: envVersion ?? '',
platform: platform ?? ''
}
}
// 发送埋点数据到服务器
async function sendTrack(eventName, eventType = 'click', customParams = {}) {
const eventData = await buildEventData(eventName, eventType, customParams);
request({
url: '/api/common/tracking/create',
method: 'POST',
data: eventData
})
}
export default {
sendTrack
}