xugenyuan

ref |> 完善埋点基础封装

Signed-off-by: xugenyuan <xugenyuan@wondertek.com.cn>
import { SpConstants } from 'wdConstant/Index';
import { AccountManagerUtils, AppUtils, DeviceUtil, SPHelper, StringUtils } from 'wdKit/Index';
import { AccountManagerUtils, AppUtils, DeviceUtil, MpaasUtils, SPHelper, StringUtils } from 'wdKit/Index';
import { HostEnum, HostManager } from 'wdNetwork/Index';
export type ParamType = Record<string, string | number | boolean | Array<string>>
... ... @@ -7,7 +7,9 @@ export type ParamType = Record<string, string | number | boolean | Array<string>
export class PublicParams {
getPublicParams() : Promise<ParamType> {
return new Promise((resolve) => {
return new Promise(async (resolve) => {
let utdid = await MpaasUtils.mpaasUtdid();
let pub: ParamType = {
"userName": SPHelper.default.getSync(SpConstants.USER_NAME, '') as string,
... ... @@ -24,7 +26,7 @@ export class PublicParams {
"version": AppUtils.getAppVersionName(),
"deviceId": DeviceUtil.clientId(),
"model": DeviceUtil.getMarketName() || "未知",
"mpaasId": PublicParams.getMpaasId(),
"mpaasId": utdid,
}
resolve(pub)
})
... ... @@ -52,9 +54,4 @@ export class PublicParams {
}
return ""
}
private static getMpaasId() {
// TODO: 新增mpaasId utdid
return 'alsjdflajxaljdlfjaldjfa';
}
}
... ...
import { ContentDetailDTO } from 'wdBean/Index';
import { CompInfoBean, ContentDetailDTO, ContentDTO, PageInfoDTO } from 'wdBean/Index';
import { ParamType } from './PublicParams';
import { TrackingUtils } from './TrackingUtils';
export class TrackParamConvert {
static convertContentDetail(detail: ContentDetailDTO) : ParamType {
/// 页面pageInfo 转换 埋点参数
static page(pageInfo?: PageInfoDTO) : ParamType {
return TrackParamConvert.pageCompProgram(pageInfo, undefined, undefined)
}
// 页面comp 转换 埋点参数
static pageAndComp(pageInfo?: PageInfoDTO, comp?: CompInfoBean) : ParamType {
return TrackParamConvert.pageCompProgram(pageInfo, comp, undefined)
}
// 运营位数据 转换 埋点参数
static program(program?: ContentDTO) : ParamType {
return TrackParamConvert.pageCompProgram(undefined, undefined, program)
}
static pageCompProgram(pageInfo?: PageInfoDTO, comp?: CompInfoBean, program?: ContentDTO) : ParamType {
let params = TrackingUtils.generateParams()
//TODO: 转换参数
return params
}
static contentDetail(detail: ContentDetailDTO) : ParamType {
let param: ParamType = {
"contentType": detail.newsType.toFixed(0),
"contentId": detail.newsId,
"contentName": detail.newsTitle
"contentName": detail.newsTitle,
"channelSourceId": detail.reLInfo?.channelId || "",
"rmhPlatform": detail.rmhPlatform,
}
if (detail.rmhInfo && detail.rmhInfo.rmhId.length > 0) {
param["saAuthorId"] = detail.rmhInfo.rmhId
param["saAuthorName"] = detail.rmhInfo.rmhName || ""
}
// 图文和音频
if (detail.newsType == 8 || detail.newsType == 13) {
param["readFlag"] = detail.readFlag ? detail.readFlag : 0
}
//TODO: 添加更多参数
// TODO: 频道处理
// if (detail.channelsList) {
// param["contentShowChannelId"] = X
// }
// TODO: 专题处理
// detail.topicInfo.
// param["summaryType"] = X
// param["summaryId"] = X
// TODO: 直播
if (detail.newsType == 2 && detail.liveInfo) {
// param["vliveId"] = X
// param["vliveName"] = X
// param["liveMode"] = X
// param["liveStreamType"] = X
// param["liveType"] = X
}
TrackParamConvert.appendRecommend(detail, param)
... ... @@ -21,6 +72,8 @@ export class TrackParamConvert {
private static appendRecommend(detail: ContentDetailDTO, to: ParamType) {
//TODO: ContentDetailDTO 增加推荐字段
to["sceneId"] = "9999"
to["subSceneId"] = ""
to["cnsTraceId"] = "selfHold"
... ...
import { ParamType } from './PublicParams';
export class TrackingUtils {
static generateParams(extParams?: ParamType) : ParamType {
let retParam: ParamType = {}
if (extParams) {
for (const obj of Object.entries(extParams)) {
// Logger.info(TAG, ` ${obj[0]} => ` + `${obj[1]}`);
retParam[obj[0]] = obj[1]
}
}
return retParam
}
// wdTracking内部调用
static fillPositionWith(attr: ParamType) {
let pageName = attr["pageName"] as string
let action = attr["action"] as string
if (action.length > 0) {
attr["saPosition"] = pageName + "_" + action
return
}
attr["saPosition"] = pageName
}
}
\ No newline at end of file
... ...
... ... @@ -9,6 +9,7 @@ const TAG = "WDTracking"
export class Tracking {
// 通用埋点事件
static event(eventId: string, params?: ParamType) {
if (!TrackingModule.getHasInit()) {
... ...
import { ParamType } from '../common/PublicParams';
import { TrackingUtils } from '../common/TrackingUtils';
import { Tracking } from './Tracking';
export class TrackingButton {
// 普通按钮点击事件,例如登录按钮点击
// 对于其他按钮 各个业务 可以直接调用 Tracking.event,如果参数较多的话,可以在这里添加。
static click(buttonName: string, pageId: string, pageName: string, extParams?: ParamType) {
if (!extParams) {
extParams = {}
}
extParams["pageName"] = pageName
extParams["pageId"] = pageId
extParams["clickButtonName"] = buttonName
let params = TrackingUtils.generateParams(extParams)
params["pageName"] = pageName
params["pageId"] = pageId
params["clickButtonName"] = buttonName
Tracking.event("name_click", extParams)
Tracking.event("name_click", params)
}
}
\ No newline at end of file
... ...
import { ParamType } from '../common/PublicParams'
import { TrackConstants } from "../common/TrackConstants"
import { TrackingUtils } from '../common/TrackingUtils'
import { Tracking } from './Tracking'
import { PointerMatrix } from '@kit.TestKit'
export class TrackingContent {
... ... @@ -8,38 +11,96 @@ export class TrackingContent {
/// pageName 如果是统一业务值 见 TrackConstants
/// pageId
/// extParams 模型转换成字段参数传值 转换方法见 TrackParamConvert
static common(eventType: TrackConstants.EventType, pageId: string, pageName: string, extParams: ParamType) {
static common(eventType: TrackConstants.EventType, pageId: string, pageName: string, extParams?: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
if (eventType === TrackConstants.EventType.Click) {
params["action"] = TrackConstants.ActionType.DetailPageShow
TrackingUtils.fillPositionWith(params)
Tracking.event("content_click", params)
} else if (eventType === TrackConstants.EventType.Show) {
params["action"] = TrackConstants.ActionType.Show
TrackingUtils.fillPositionWith(params)
Tracking.event("content_exposure", params)
}
}
static commonShare(shareType: number, pageId: string, pageName: string, extParams: ParamType) {
static commonShare(shareType: number, pageId: string, pageName: string, extParams?: ParamType) {
}
static like(like: boolean, pageId: string, pageName: string, extParams: ParamType) {
static like(like: boolean, pageId: string, pageName: string, extParams?: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["action"] = like ? TrackConstants.ActionType.Like : TrackConstants.ActionType.DisLike
TrackingUtils.fillPositionWith(params)
Tracking.event(like ? "content_like_click" : "content_cancel_like_click", params)
}
static collect(collect: boolean, pageId: string, pageName: string, extParams: ParamType) {
static collect(collect: boolean, pageId: string, pageName: string, extParams?: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["action"] = collect ? TrackConstants.ActionType.Collect : TrackConstants.ActionType.UnCollect
TrackingUtils.fillPositionWith(params)
Tracking.event(collect ? "content_collection_click" : "content_cancel_collection_click", params)
}
static follow(follow: boolean, followUserId: string, followUserName: string, pageId: string, pageName: string, extParams: ParamType) {
static follow(follow: boolean, followUserId: string, followUserName: string, pageId: string, pageName: string, extParams?: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params[follow ? "followPDUserId" : "cancelFollowPDUseId"] = followUserId
params[follow ? "followUserName" : "cancelFollowUserName"] = followUserName
params["action"] = follow ? TrackConstants.ActionType.Follow : TrackConstants.ActionType.UnFollow
TrackingUtils.fillPositionWith(params)
/// 关注号主的,特殊处理下itemId字段,不用所在内容的推荐字段
params["itemId"] = followUserId + "_author"
Tracking.event(follow ? "follow_click" : "cancel_follow_click", params)
}
static commentClick(pageId: string, pageName: string, extParams: ParamType) {
static commentClick(pageId: string, pageName: string, extParams?: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["action"] =TrackConstants.ActionType.Comment
TrackingUtils.fillPositionWith(params)
Tracking.event("content_comment_click", params)
}
static commentShare(pageId: string, pageName: string, extParams: ParamType) {
static commentShare(pageId: string, pageName: string, extParams?: ParamType) {
}
// 内容下载点击事件 1.图片 2.音频 3.视频
static download(donwloadContentType: number, pageId: string, pageName: string, extParams: ParamType) {
static download(donwloadContentType: number, pageId: string, pageName: string, extParams?: ParamType) {
}
}
\ No newline at end of file
... ...
import { ParamType } from '../common/PublicParams'
import { TrackConstants } from '../common/TrackConstants'
import { TrackingUtils } from '../common/TrackingUtils'
import { Tracking } from './Tracking'
export class TrackingPageBrowse {
/// 页面浏览事件
// duration 浏览时长,上层计算,单位毫秒
static trackCommonPageExposureEnd(pageId: string, pageName: string, duration: number ,extParams?: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["duration"] = duration / 1000
params["action"] = TrackConstants.ActionType.Browse
TrackingUtils.fillPositionWith(params)
Tracking.event("channel_exposure", params)
}
}
\ No newline at end of file
... ...
import { ParamType } from '../common/PublicParams';
import { TrackConstants } from '../common/TrackConstants';
import { TrackingUtils } from '../common/TrackingUtils';
import { Tracking } from './Tracking';
import { TrackingContent } from './TrackingContent';
/*
* 处理音频、视频、直播 正片播放、播放结束、播放错误等
* */
export class TrackingPlay {
// 视频
// 视频 正片播放
static videoPositivePlay(prepareTime: number, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["timeConsuming"] = prepareTime
params["action"] = TrackConstants.ActionType.DetailPageShow
TrackingUtils.fillPositionWith(params)
Tracking.event("video_positive_pybk", params)
}
// 视频 播放结束
static videoPlayEnd(currentPlayTime: number, totalTime: number, browseTime: number, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
let playCompleted = currentPlayTime >= totalTime;
params["pybkDuration"] = currentPlayTime
params["completRate"] = playCompleted ? 1 : 0
params["duration"] = browseTime
params["action"] = TrackConstants.ActionType.Browse
TrackingUtils.fillPositionWith(params)
Tracking.event("video_end_pybk", params)
}
// 视频 播放错误
static videoPlayError(errorInfo: string, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["errorInformation"] = errorInfo
params["action"] = TrackConstants.ActionType.DetailPageShow
TrackingUtils.fillPositionWith(params)
Tracking.event("pybk_error", params)
}
// 音频
// 音频 正片播放
static audioPositivePlay(prepareTime: number, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["timeConsuming"] = prepareTime
params["action"] = TrackConstants.ActionType.DetailPageShow
TrackingUtils.fillPositionWith(params)
Tracking.event("audio_positive_pybk", params)
}
// 音频 播放结束
static audioPlayEnd(currentPlayTime: number, totalTime: number, browseTime: number, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
let playCompleted = currentPlayTime >= totalTime;
params["pybkDuration"] = currentPlayTime
params["completRate"] = playCompleted ? 1 : 0
params["duration"] = browseTime
params["action"] = TrackConstants.ActionType.Browse
TrackingUtils.fillPositionWith(params)
Tracking.event("audio_end_pybk", params)
}
// 音频 播放错误
static audioPlayError(errorInfo: string, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["errorInformation"] = errorInfo
params["action"] = TrackConstants.ActionType.DetailPageShow
TrackingUtils.fillPositionWith(params)
Tracking.event("audio_error", params)
}
// 直播
// 直播 正片播放
static liveVideoPositivePlay(prepareTime: number, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
params["timeConsuming"] = prepareTime
params["action"] = TrackConstants.ActionType.DetailPageShow
TrackingUtils.fillPositionWith(params)
Tracking.event("live_positive_pybk", params)
}
// 直播 播放结束
static liveVideoPlayEnd(currentPlayTime: number, totalTime: number, browseTime: number, pageId: string, pageName: string, extParams: ParamType) {
let params = TrackingUtils.generateParams(extParams)
if (pageId.length) {
params["pageId"] = pageId
}
if (pageName.length) {
params["pageName"] = pageName
}
let playCompleted = currentPlayTime >= totalTime;
params["pybkDuration"] = currentPlayTime
params["completRate"] = playCompleted ? 1 : 0
params["duration"] = browseTime
params["action"] = TrackConstants.ActionType.Browse
TrackingUtils.fillPositionWith(params)
Tracking.event("quit_live_click", params)
}
}
\ No newline at end of file
... ...