1. 如何查看埋點方案
在進行埋點前,需要確定在哪裡埋點、埋哪些點等,即需要梳理清楚明確的埋點需求。在QuickTracking平台中將明確的埋點需求稱為埋點方案,並為埋點方案設計了規範模板。如下:

在埋點方案中,明確的所需埋點內容有:
1、事件主體:指“誰”觸發了這個事件,分為裝置ID和帳號ID,上報的事件務必具備其中之一。
裝置ID:HarmonyNext應用的預設裝置ID為應用層級唯一的裝置ID,由Quicktracking自動產生:
帳號ID:用戶端使用者登入後帳號標識,當一個使用者在不同的裝置進行登入時,裝置ID會發生變化,但是帳號ID不會發生變化。例如一個使用者使用手機和pad分別登入。
2、使用者屬性:針對帳號ID的屬性,例如帳號ID為“testdemo@111”的使用者,“生日”為“1999-02-13”,“會員等級”為“鉑金”等。“生日”和“會員”等級就為使用者屬性。
3、渠道屬性:廣告投放的屬性,例如投放渠道、投放方式、投放內容等。
4、全域屬性:在全域設定一次後,每一個事件都會攜帶的屬性
5、頁面瀏覽事件:頁面載入時上報的事件(埋點方案中頁面編碼和事件編碼相等的事件,也是標記為藍色的事件)
6、點擊、曝光、自訂事件:用戶端使用者與用戶端發生任意互動時上報的事件
2. 裝置ID&帳號ID&使用者屬性設定
2.1. 裝置ID
目前的版本裝置ID的產生為QuickTrackingSDK自動產生,暫不支援自訂裝置ID
2.1.1 擷取裝置ID
@quicktracking/analytics_2.0.3版本開始支援
import { getDeviceId } from '@quicktracking/analytics';
function getDeviceId():string2.2. 帳號ID
QuickTracking SDK在統計使用者時以裝置為標準,如果需要統計自身的帳號,請使用以下方法
2.2.1. 使用者登入
2.2.1.1. API說明
import { onProfileSignIn } from '@quicktracking/analytics';
function onProfileSignIn(provider: string, puid: string):void2.2.1.2. 參數說明
參數 | 類型 | 含義 | 是否必填 |
provider | string | 使用者暱稱,非Null 字元串,且長度不超過32 | 是 |
puid | string | 使用者帳號ID,非Null 字元串,且長度不超過64 | 是 |
注意:帳號ID設定後將被存入本機存放區,只有卸載App、清空應用資料或者調用下述的登出介面時,帳號ID才會失效,否則每一個事件都將攜帶帳號ID。
2.2.1.3. 範例程式碼
import { onProfileSignIn } from '@quicktracking/analytics';
Button('登入').onClick(() => {
onProfileSignIn("QuickTrackingUser", "QuickTrackingUser_demo");
})2.2.2. 使用者登出
如果不再需要綁定使用者帳號,可以調用SDK提供的使用者登出方法,調用後,SDK不再發送使用者帳號相關內容
2.2.2.1. API說明
import { onProfileSignOff } from '@quicktracking/analytics';
function onProfileSignOff():void2.2.2.2. 範例程式碼
import { onProfileSignOff } from '@quicktracking/analytics';
Button('登出').onClick(() => {
onProfileSignOff();
})2.3. 使用者屬性上傳
使用事件編碼固定為$$_user_profile的自訂事件上傳,該事件所攜帶的事件屬性會被作為使用者屬性放在使用者表中。
2.3.1. API說明
參見自訂事件API
2.3.2. 範例程式碼
import { trackEvent } from '@quicktracking/analytics';
Button('上傳使用者屬性').onClick(() => {
trackEvent("$$_user_profile", {
sex: "boy",
age: 13,
favorite: "basketball"
});
})3. 渠道屬性
有兩種情境需要統計渠道屬性資訊:
H5連結拉活已安裝APP應用
H5連結拉新未安裝APP應用
3.1. H5連結拉活已安裝APP應用
喚起App的URL Scheme中攜帶這些渠道屬性,且屬性key務必以“utm_”開頭,因為SDK識別的關鍵字為“utm_”。
例如:<URL scheme>?utm_channel=gzh
注意:!!!如果渠道屬性已經與市面上渠道投放公司進行了合作,無法使用utm_開頭,可以使用全域屬性API將渠道屬性進行埋點上報(屬性key依然需要以utm_開頭)
3.1.1. h5端喚起程式碼範例
<html>
<script>
function openHarmonyApp() {
var url = "hmapp://ut.open.realtime:80/Index?utm_a=aaa&utm_b=bbb";
alert(url)
window.location.href = url
};
</script>
<body>
<button onclick="openHarmonyApp()">喚起鴻蒙應用</button>
</body>
</html>3.1.2. 鴻蒙Next應用程式碼範例
應用如能被H5連結喚起,需對模組的skills標籤進行額外配置,具體請參考鴻蒙Next官網文檔
3.1.2.1. 配置樣本截圖

3.1.2.2. 解析utm參數並設定為全域屬性樣本
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import hilog from '@ohos.hilog';
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import {registerGlobalProperties, trackAppInstall } from '@quicktracking/analytics'
export default class EntryAbility extends UIAbility {
handleWant(want: Want) {
if (want.uri && want.uri.indexOf('utm_')) {
const dUri = decodeURI(want.uri)
const utmArgs:Record<string, string> = {}
const paramsString = dUri.split("?")[1]
const paramsArray = paramsString.split("&")
for (let i of paramsArray) {
const kvs = i.split("=")
const k: string = kvs[0]
const v = kvs[1]
utmArgs[k] = v
}
registerGlobalProperties(utmArgs)
}
}
//H5連結拉起APP應用,暖開機
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.handleWant(want)
}
//H5連結拉起APP應用,冷啟動
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.handleWant(want)
//!!!僅在enableAutoTrackApplication = false時需要調用
trackAppInstall({
browser: `'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.x.x Safari/537.36'`,
page_name: "ManIndex", //喚起頁面的頁面編碼,可選,建議配置
url: "pages/Index" //喚起頁面的頁面路徑,可選,建議配置
}, {
man_app_p1: 111, //自訂屬性,可選
man_app_p2: 222
})
}
onWindowStageCreate(windowStage: window.WindowStage): void {
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {
return;
}
});
}
}3.2. H5連結拉新未安裝APP應用
該情境下,如果僅是H5連結中攜帶“utm_”參數,已經無法做到下載APP後的啟動事件攜帶“utm_”參數。所以需要進行“H5喚起事件”與“應用啟用事件”做關於“IP地址和瀏覽器UserAgent”的模糊比對。
當使用者在H5中點擊「喚起/下載App」的按鈕時,上報“應用喚起事件($$_app_link)”,在事件中需要攜帶喚起App的appKey和渠道屬性。
//樣本
aplus_queue.push({
action:'aplus.recordAppLink',
arguments:[{
targetAppKey:'要喚起的應用appKey', // 必填,要喚起的應用appKey
custom1: 'custom1', // 選填,自訂參數
...
}]
})App下載後的通過自動或者手動上報第一次啟動事件“應用啟用事件($$_app_install)”完成關聯動作。
如果 SDK 預設配置 enableAutoTrackApplication = true,自動上報$$_app_install應用啟用事件
如果 SDK 預設配置 enableAutoTrackApplication = false,需開發人員主動上報應用啟用事件
3.2.1. API說明
import { trackAppInstall } from '@quicktracking/analytics'
function trackAppInstall(params: {
browser?: string,
[key: string]: string
}, customProps?: object)3.2.2. 調用樣本
參見3.1.2鴻蒙Next3.1.2. 3.1.2. 鴻蒙Next應用程式碼範例
4. 全域屬性
4.1. 註冊全域屬性
4.1.1. API 說明
import { registerGlobalProperties } from '@quicktracking/analytics'
function registerGlobalProperties(params?: Record<string, string | number | string[]>)4.1.2. 參數說明
參數 | 含義 |
params | kv索引值對 k屬性名稱,string類型,應為長度為128個字元以內的非空(包括undefined)字串 v屬性值,string類型或number類型或字串數群組類型
|
4.1.3. 程式碼範例
import { registerGlobalProperties } from '@quicktracking/analytics'
Button('註冊全域屬性').onClick(async () => {
registerGlobalProperties({
"a": 1,
"b": 2
}) // 輸出結果:{a: 1, b: 2}
})
Button('重新註冊全域屬性').onClick(async () => {
registerGlobalProperties({
"b": 6,
"c": 4
}) // 輸出結果:{a: 1, b: 6, c: 4}
})注意:如果和已經存在的全域屬性key重複,則更新已有值;如果和已經存在的全域屬性key不一致,則插入新的全域屬性。
4.2. 刪除一個全域屬性
4.2.1. API 說明
import { unregisterGlobalProperty } from '@quicktracking/analytics'
function unregisterGlobalProperty(key?: string)4.2.2. 參數說明
參數 | 含義 |
key | 需要刪除的屬性key名稱,key應該有值並且是128個字元以內的字串 |
4.2.3. 程式碼範例
import { unregisterGlobalProperty } from '@quicktracking/analytics'
Button('刪除一個全域屬性值').onClick(async () => {
unregisterGlobalProperty('a')
})4.3. 根據key擷取單個全域屬性
4.3.1. API 說明
import { getGlobalProperty } from '@quicktracking/analytics'
function getGlobalProperty(key?: string): string | number | string[] | undefined4.3.2. 參數說明
參數 | 含義 |
key | 屬性key名稱,key應該有值並且是128個字元以內的字串 |
4.3.3. 程式碼範例
import { getGlobalProperty } from '@quicktracking/analytics'
Button('根據Key擷取單個全域屬性').onClick(async () => {
promptAction.showToast({
message:`擷取的屬性b = ${getGlobalProperty("b")}`,
duration: 3000
})
})4.4. 擷取所有全域屬性
4.4.1. API 說明
import { getGlobalProperties } from '@quicktracking/analytics'
function getGlobalProperties(): Record<string, string | number | string[]>4.4.2. 程式碼範例
import { getGlobalProperties } from '@quicktracking/analytics'
Button('擷取所有全域屬性').onClick(async () => {
promptAction.showToast({
message: `全域屬性為\n${JSON.stringify(getGlobalProperties())}`,
duration: 5000
})
})4.5. 清除所有全域屬性
4.5.1. API 說明
import { clearGlobalProperties } from '@quicktracking/analytics'
function clearGlobalProperties()4.5.2. 程式碼範例
Button('清除所有的全域屬性').onClick(async () => {
clearGlobalProperties()
promptAction.showToast({
message: `全域屬性為\n${JSON.stringify(getGlobalProperties())}`,
duration: 5000
})
})5. 頁面瀏覽事件
QuickTracking 鴻蒙Next SDK 提供頁面自動採集和手動採集兩種能力
5.1. 自動採集
如果 SDK 預設配置 enableAutoTrackPage = true,則自動採集頁面瀏覽事件,詳情參見預初始化API說明
路由模式 | 自動頁面瀏覽事件-頁面編碼 | 自動頁面瀏覽事件-頁面路徑 |
RouterPage | 觸發生命週期的routerPage頁面的名稱 | 觸發生命週期的routerPage頁面的路徑 |
NavDestination | NavDestination組件的名稱 | NavDestination組件的名稱 |
5.2. 手動採集
相比iOS系統或者Android系統,鴻蒙Next系統從概念上沒有嚴格意義上的頁面組件,任何通過裝飾器文法聲明的組件只要在main_pages.json檔案或者route_map.json檔案中添加了標識,都可以認為是業務意義上的頁面組件。
定義在main_pages.json檔案中的RouterPage頁面

定義在route_map.json檔案中NavDestination頁面

針對上述兩種情境,SDK 提供一組需成對調用的API onPageStart 和 onPageEnd 進行頁面埋點。
5.2.1. API 說明
import { onPageStart, onPageEnd } from '@quicktracking/analytics'
function onPageStart(context: PageContext | null, pageName: string, pageUrl?: string) //頁面進入時調用
function onPageEnd(context: PageContext | null, pageName: string, pageUrl?: string) //頁面退出時調用5.2.2. 參數說明
參數 | 含義 |
context | 頁面環境內容變數 |
pageName | 頁面事件的事件編碼,長度為128位字元以內的字串,且不可為空 |
pageUrl | 頁面url,若某些頁面調用邏輯拿不到context,需要開發人員主動傳值,否則資料分析會不準備。預設值"undefined" |
5.2.3. 程式碼範例
RouterPage 頁面
import { onPageStart, onPageEnd, updatePageProperties, skipAutoTrack } from '@quicktracking/analytics';
@Entry
@Component
struct RouterPageDemo {
@State message: string = 'RouterPageDemo';
onPageShow(): void {
//skipAutoTrack(this)
onPageStart(this, "RouterPageDemo")
updatePageProperties(this, "RouterPageDemo", {
a: 1,
b: 2
})
}
onPageHide() {
onPageEnd(this, "RouterPageDemo")
}
build() {
Column() {
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
}NavDestination 頁面
import { onPageStart, updatePageProperties, onPageEnd, skipAutoTrack } from '@quicktracking/analytics';
@Builder
export function IndexBuilder(name: string, param: Object) {
NaviPageOne()
}
@Component
export default struct NaviPageOne {
@State name: string = 'NaviPageOne';
pathInfos: NavPathStack = new NavPathStack();
build() {
NavDestination() {
Column() {
Text("")
.id('NaviPageOneHelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
.onReady((context: NavDestinationContext) => {
this.pathInfos = context.pathStack
})
.title(this.name)
.id(this.name)
.onShown(() =>{
//skipAutoTrack(this)
onPageStart(this, "NaviPageOne")
updatePageProperties(this, "NaviPageOne", {
a: 1,
b: 2
})
})
.onHidden(() => {
onPageEnd(this, "NaviPageOne")
})
}
}5.3. 設定頁面事件屬性
5.3.1. API 說明
import { updatePageProperties } from '@quicktracking/analytics';
function updatePageProperties(context: PageContext, pageName: string, params?: Record<string, string | number | string[]>, pageUrl?: string) 5.3.2. 參數說明
參數 | 含義 |
context | 頁面環境內容變數 |
pageName | 頁面事件的事件編碼,長度為128位字元以內的字串,且不可為空 |
params | 頁面事件的事件屬性,kv索引值對集合 k屬性名稱,string類型,應為長度為128個字元以內的非空(包括undefined)字串 v屬性值,string類型或number類型或字串數群組類型
|
pageUrl | 頁面url,若某些頁面調用邏輯拿不到context,需要開發人員主動傳值,否則資料分析會不準確。預設值"undefined" |
5.3.3. 程式碼範例
見5.2.3節程式碼範例
5.4. 頁面自動採集與頁面手動採集混用
某些情境下,使用者埋點期望既用自動頁面採集完成通用行為採集,又希望某些頁面通過手動控制埋點時機完成精細化採集,然而如果自動頁面瀏覽事件和手動頁面瀏覽事件重複上報會引起使用者行為資料的準確性,為此SDK通過了關閉單獨某個頁面自動採集的能力
5.4.1. API說明
import { skipAutoTrack } from '@quicktracking/analytics';
function skipAutoTrack(context: PageContext)5.4.2. 參數說明
參數 | 含義 |
context | 頁面環境內容變數 |
5.4.3. 程式碼範例
見5.2.2程式碼範例
注意:!!!
為了保障頁面事件編碼的統計歸一,當自動採集的頁面在頁面進入時開發人員調用onPageStart,並指定了頁面事件的事件編碼pageName,此時自動的頁面事件的事件編碼也會變成onPageStart傳入的pageName
如果開發人員開啟頁面事件自動採集功能,並且頁面A沒有調用skipAutoTrack,又通過代碼埋點成對調用onPageStart、onPageEnd,此時當觸發A頁面離開時將同時上報 2 條頁面瀏覽事件
onPageStart、onPageEnd 需要成對調用,否則影響頁面事件採集的準確性
6. 自訂事件
6.1.1. API 說明
import { trackEvent } from '@quicktracking/analytics';
function trackEvent(eventID: string, params?: Record<string, string | number | string[]>)6.1.2. 參數說明
參數 | 含義 |
eventID | 自訂事件的事件編碼 |
params | 自訂事件的事件屬性,kv索引值對集合 k屬性名稱,string類型,應為長度為128個字元以內的非空(包括undefined)字串 v屬性值,string類型或number類型或字串數群組類型
注意:!!!其中 k="$page_name":為事件預製屬性,用於聲明當前自訂事件所歸屬頁面的頁面編碼,選擇性參數,若傳值,則長度為128位字元以內的字串,且不可為空 k="$page_url":為事件預製屬性,用於聲明當前自訂事件所歸屬頁面的頁面路徑,選擇性參數,若傳值,則長度為256位字元以內的字串,且不可為空 |
6.1.3. 程式碼範例
在UI線程中埋點
import { trackEvent } from '@quicktracking/analytics';
Button('自訂事件').onClick(() => {
trackEvent("eventid", {
param1: "value"
param2: 2,
param3: ["productId1", "productId2"],
$page_name: "pageDemo", // 事件預製屬性,選擇性參數
$page_url: "pages/pageDemo", // 事件預製屬性,選擇性參數
});
});在worker線程中埋點
import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';
import { trackEvent } from '@quicktracking/analytics';
const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
workerPort.onmessage = function (e: MessageEvents) {
trackEvent("workerevent", {
param1: "value"
param2: 2,
param3: ["productId1", "productId2"],
$page_name: "pageDemo", // 事件預製屬性,選擇性參數
$page_url: "pages/pageDemo", // 事件預製屬性,選擇性參數
})
}
workerPort.onmessageerror = function (e: MessageEvents) {}
workerPort.onerror = function (e: ErrorEvent) {}暫未提供c++中直接調用的方法,如需要c++層埋點,請參考鴻蒙Next官網c++與arkts互連的知識,通過NAPI來調用trackEvent方法實現埋點
7. 手動採集應用啟動、退出、啟用事件
SDK配置 enableAutoTrackApplication = true 預設開啟,如果某些情境下不能滿足啟動、退出、啟用事件的採集需求,可以通過手動調用API採集這三個情境行為。
注意:!!!
使用手動採集啟動、退出、啟用事件不能與自動採集應用啟動、退出、啟用事件混用,否則影響資料統計準確性。即需要設定enableAutoTrackApplication = false。
7.1. 手動上報應用啟用事件
7.1.1. API 說明
import { trackAppInstall } from '@quicktracking/analytics';
function trackAppInstall(context: ApplicationContext, appKey: string, params: {
browser?: string,
$page_name?: string,
$page_url?: string,
[key: string]: string | number | string[]
}) {
appTrack.manager.manualTrackAppInstall(context, appKey, params)
}7.1.2. 參數說明
參數 | 含義 |
context | 應用環境內容變數 |
appKey | 應用唯一標識appKey,入參的appkey一定要與QT後台保持一致 |
params | 應用啟用事件的事件屬性,kv索引值對集合 k屬性名稱,string類型,應為長度為128個字元以內的非空(包括undefined)字串 v屬性值,string類型或number類型或字串數群組類型
注意:!!!其中 k="browser":為啟用事件的預製屬性,用於聲明當前喚起應用的瀏覽器UserAgent資訊,選擇性參數,預設為undefined k="utm_xxx":為啟用事件的預製屬性,k以‘utm_’字串開頭,用於聲明當前喚起應用的渠道參數資訊,sdk會解析這類參數,並儲存在全域屬性中。 k="$page_name":為啟用事件的預製屬性,用於聲明當前啟用事件所歸屬頁面的頁面編碼,選擇性參數, 預設為undefined。若傳值,則長度為128位字元以內的字串,且不可為空 k="$page_url":為啟用事件的預製屬性,用於聲明當前啟用事件所歸屬頁面的頁面路徑,選擇性參數, 預設為undefined。若傳值,則長度為256位字元以內的字串,且不可為空 |
7.1.3. 程式碼範例
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import { trackAppInstall } from '@quicktracking/analytics';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
trackAppInstall(
this.context.getApplicationContext(),
"您應用的appKey",
{
$browser: 'Mozilla/5.0 Chrome/126.0.X.X Safari/537.36', //選擇性參數,預設為undefined
$page_name: "home_page", //選擇性參數,預設為undefined
$page_url: "pages/Index", //選擇性參數,預設為undefined
utm_source: "hwbroser",
man_app_p1: 111,
man_app_p2: '222',
man_app_p3: ['1', '2']
}
)
}
}7.2. 手動上報應用啟動事件
7.2.1. API 說明
import { trackAppStart } from '@quicktracking/analytics';
function trackAppStart(params: {
isFirstLaunch?: boolean,
$page_name?: string,
$page_url?: string,
}, customParams?: object )7.2.2. 參數說明
參數 | 含義 |
params | 應用啟動事件的預製屬性,kv索引值對集合。 其中: k="isFirstLaunch"為冷暖開機標識,預設值為false,代表暖開機,如果想區分冷、暖開機事件,需要開發人員自己控制isFirstLaunch欄位的傳值 k="$page_name":為啟用事件的預製屬性,用於聲明當前啟用事件所歸屬頁面的頁面編碼,選擇性參數, 預設為undefined。若傳值,則長度為128位字元以內的字串,且不可為空 k="$page_url":為啟用事件的預製屬性,用於聲明當前啟用事件所歸屬頁面的頁面路徑,選擇性參數, 預設為undefined。若傳值,則長度為256位字元以內的字串,且不可為空 |
customParams | 應用啟動事件的事件屬性,kv索引值對集合 k屬性名稱,string類型,應為長度為128個字元以內的非空(包括undefined)字串 v屬性值,string類型或number類型或字串數群組類型
|
7.2.3. 程式碼範例
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import { trackAppStart } from '@quicktracking/analytics';
export default class EntryAbility extends UIAbility {
onForeground(): void {
trackAppStart({
isFirstLaunch: true, //選擇性參數,預設為false
$page_name: "home_page", //選擇性參數,預設為undefined
$page_url: "pages/Index" //選擇性參數,預設為undefined
}, {
man_app_p1: 111,
man_app_p2: "222",
man_app_p3: ['1', '2']
})
}
}7.3. 手動上報應用退出事件
7.3.1. API 說明
import { trackAppEnd } from '@quicktracking/analytics';
function trackAppEnd(params: {
$page_name?: string,
$page_url?: string,
duration?: number
}, customParams?: object)7.3.2. 參數說明
參數 | 含義 |
params | 應用退出事件的預製屬性kv索引值對集合。 其中: k="duration":代表應用瀏覽時間長度,number類型,預設值為0 k="$page_name":代表當前應用退出事件所歸屬頁面的頁面編碼,選擇性參數,預設為undefined。若傳值,則長度為128位字元以內的字串,且不可為空 k="$page_url":代表當前應用退出事件所歸屬頁面的頁面路徑,選擇性參數,預設為undefined。若傳值,則長度為256位字元以內的字串,且不可為空 |
customParams | 應用啟動事件的事件屬性,kv索引值對集合 k屬性名稱,string類型,應為長度為128個字元以內的非空(包括undefined)字串 v屬性值,string類型或number類型或字串數群組類型
|
7.3.3. 程式碼範例
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import { trackAppEnd } from '@quicktracking/analytics';
export default class EntryAbility extends UIAbility {
onBackground(): void {
trackAppEnd({
$page_name: "home_page",
$page_url: "pages/Index",
duration: 666
}, {
man_app_p1: 111,
man_app_p2: "222",
man_app_p3: ['1', '2']
})
}
}