1# 事件上报
2
3HiAppEvent提供接口用于处理中上报事件。
4
5## 接口说明
6
7API接口的具体使用说明(参数使用限制、具体取值范围等)请参考[应用事件打点API文档](../reference/apis-performance-analysis-kit/js-apis-hiviewdfx-hiappevent.md)。
8
9**数据处理者接口功能介绍:**
10
11| 接口名                                    | 描述                                             |
12| ----------------------------------------- | ------------------------------------------------ |
13| addProcessor(processor: Processor): number | 添加数据处理者,以通过预置的处理者进行事件上报。 |
14| removeProcessor(id: number): void          | 移除数据处理者,以移除预置的处理者。             |
15
16**用户ID接口功能介绍:**
17
18| 接口名                                     | 描述                                         |
19| ------------------------------------------ | -------------------------------------------- |
20| setUserId(name: string, value: string): void | 设置用户ID,数据处理者上报事件时可携带用户ID。 |
21| getUserId(name: string): string               | 获取已设置的用户ID。                           |
22
23**用户属性接口功能介绍:**
24
25| 接口名                                           | 描述                                             |
26| ------------------------------------------------ | ------------------------------------------------ |
27| setUserProperty(name: string, value: string): void | 设置用户属性,数据处理者上报事件时可携带用户属性。 |
28| getUserProperty(name: string): string               | 获取已设置的用户属性。                            |
29
30## 开发步骤
31
32以实现对用户点击按钮行为的事件打点并由处理者进行事件上报为例,说明开发步骤。
33
341. 编辑工程中的“entry > src > main > ets  > pages > Index.ets” 文件,添加一个按钮并在其onClick函数中添加数据处理者。analytics_demo为预置在设备里面的数据处理者lib库<!--Del-->,具体实现可以参考[《HiAppEvent数据处理者lib库概述》](../../device-dev/subsystems/subsys-dfx-hiappevent-extend-so.md)<!--DelEnd-->。完整示例代码如下:
35
36   ```ts
37   import { BusinessError } from '@kit.BasicServicesKit';
38   import { hiAppEvent, hilog } from '@kit.PerformanceAnalysisKit';
39
40   @Entry
41   @Component
42   struct Index {
43     @State message: string = 'Hello World'
44
45     processorId: number = -1
46
47     build() {
48       Row() {
49         Column() {
50           Text(this.message)
51             .fontSize(50)
52             .fontWeight(FontWeight.Bold)
53
54           Button("addProcessorTest").onClick(()=>{
55             // 在按钮点击函数中进行数据处理者添加
56             let eventConfig: hiAppEvent.AppEventReportConfig = {
57               domain: 'button',
58               name: 'click',
59               isRealTime: true
60             };
61             let processor: hiAppEvent.Processor = {
62               name: 'analytics_demo',
63               debugMode: true,
64               routeInfo: 'CN',
65               onStartReport: true,
66               onBackgroundReport: true,
67               periodReport: 10,
68               batchReport: 5,
69               userIds: ['testUserIdName'],
70               userProperties: ['testUserPropertyName'],
71               eventConfigs: [eventConfig]
72             };
73             this.processorId = hiAppEvent.addProcessor(processor);
74           })
75         }
76         .width('100%')
77       }
78       .height('100%')
79     }
80   }
81   ```
82
832. 编辑工程中的“entry > src > main > ets  > pages > Index.ets” 文件,添加一个按钮并在其onClick函数中添加并查看用户ID,完整示例代码如下:
84
85   ```ts
86     Button("userIdTest").onClick(()=>{
87       // 在按钮点击函数中设置用户ID
88       hiAppEvent.setUserId('testUserIdName', '123456');
89
90       // 在按钮点击函数中获取刚设置的用户ID
91       let userId = hiAppEvent.getUserId('testUserIdName');
92       hilog.info(0x0000, 'testTag', `userId: ${userId}`)
93     })
94   ```
95
963. 编辑工程中的“entry > src > main > ets  > pages > Index.ets” 文件,添加一个按钮并在其onClick函数中添加并查看用户属性,完整示例代码如下:
97
98   ```ts
99     Button("userPropertyTest").onClick(()=>{
100       // 在按钮点击函数中设置用户属性值
101       hiAppEvent.setUserProperty('testUserPropertyName', '123456');
102
103       // 在按钮点击函数中获取刚设置的用户属性值
104       let userProperty = hiAppEvent.getUserProperty('testUserPropertyName');
105       hilog.info(0x0000, 'testTag', `userProperty: ${userProperty}`)
106     })
107   ```
108
1094. 编辑工程中的“entry > src > main > ets  > pages > Index.ets” 文件,添加一个按钮并在其onClick函数中进行事件打点,以记录按钮点击事件,完整示例代码如下:
110
111   ```ts
112     Button("writeTest").onClick(()=>{
113       // 在按钮点击函数中进行事件打点,以记录按钮点击事件
114       let eventParams: Record<string, number> = { 'click_time': 100 };
115       let eventInfo: hiAppEvent.AppEventInfo = {
116         // 事件领域定义
117         domain: "button",
118         // 事件名称定义
119         name: "click",
120         // 事件类型定义
121         eventType: hiAppEvent.EventType.BEHAVIOR,
122         // 事件参数定义
123         params: eventParams,
124       };
125       hiAppEvent.write(eventInfo).then(() => {
126         hilog.info(0x0000, 'testTag', `HiAppEvent success to write event`)
127       }).catch((err: BusinessError) => {
128         hilog.error(0x0000, 'testTag', `HiAppEvent err.code: ${err.code}, err.message: ${err.message}`)
129       });
130     })
131   ```
132
1335. 编辑工程中的“entry > src > main > ets  > pages > Index.ets” 文件,添加一个按钮并在其onClick函数中进行数据处理者移除(第二步已完成数据处理者添加),完整示例代码如下:
134
135   ```ts
136     Button("removeProcessorTest").onClick(()=>{
137       // 在按钮点击函数中进行数据处理者移除
138       hiAppEvent.removeProcessor(this.processorId);
139     })
140   ```
141
1426. 点击IDE界面中的运行按钮,运行应用工程,然后在应用界面中依次点击按钮“addProcessorTest”、“userIdTest”、“userPropertyTest”、“writeTest”、“removeProcessorTest”,则成功通过数据处理者进行一次事件上报。
143
144   最终,事件处理者成功接收到事件数据,并在Log窗口看到按钮点击事件打点成功的日志:
145
146   ```text
147   HiAppEvent success to write event
148   ```