> 技术文档 > HarmonyOS NEXT——鸿蒙神策埋点(一)

HarmonyOS NEXT——鸿蒙神策埋点(一)


1、鸿蒙神策埋点

1.1、什么是数据埋点?

数据埋点是一种数据分析技术,主要用于收集用户在应用(网站、移动应用等)中的行为数据。通过数据埋点,开发者或产品经理可以了解用户的行为模式、操作流程、功能使用情况等,进而优化产品设计和提升用户体验。

具体来说,数据埋点主要包括以下几个方面:

  1. 代码埋点:在应用中特定的代码位置植入统计代码,当用户触发这些代码时,相关的用户行为数据就会被记录下来。

  2. 可视化埋点:通过可视化界面配置埋点位置和事件,无需修改代码即可收集数据。

  3. 全埋点:自动记录应用中所有可交互元素的行为,无需预先定义埋点。

数据埋点可以收集的信息包括但不限于:

  • 用户点击了哪个按钮

  • 用户在哪个页面停留了多长时间

  • 用户从哪个渠道进入应用

  • 用户在应用中完成了哪些操作

  • 用户在操作过程中的异常行为

1.2、为什么需要做数据埋点?

数据埋点是现代数字产品(如网站、移动应用等)的重要组成部分,以下是进行数据埋点的几个主要原因:

  1. 用户行为分析:通过数据埋点,可以收集用户在产品中的行为数据,如点击、浏览、停留时间等,帮助理解用户如何与产品互动。

  2. 产品优化:了解用户行为后,可以针对性地优化产品界面、功能和用户体验,提高用户满意度和留存率。

  3. 决策支持:收集的数据可以为产品迭代、市场策略和业务决策提供数据支持,减少决策的盲目性。

  4. 转化率提升:通过分析用户在转化过程中的行为,可以发现转化漏斗中的瓶颈,采取措施提高转化率。

  5. 用户留存:分析用户留存的数据,可以了解哪些功能或内容更能吸引用户,从而采取措施提高用户粘性。

  6. 异常监测:数据埋点可以帮助监测产品中的异常行为,如错误点击、异常流量等,及时发现问题并进行处理。

  7. 个性化推荐:基于用户的行为数据,可以实现个性化内容推荐或产品推荐,提升用户体验。

  8. 性能监控:通过埋点数据可以监控应用的性能,如加载时间、响应速度等,确保产品稳定运行。

  9. 市场分析:了解用户来源、用户特征等信息,对市场进行细分,制定更有效的市场策略。

  10. 风险评估:通过对用户行为的监控,可以及时发现潜在的欺诈行为或安全风险。

  11. 合规要求:在某些行业,数据埋点是满足监管要求的必要手段,如金融行业的交易监控。

总之,数据埋点是为了更好地理解用户、优化产品、提升业务效果和风险管理,它是数据驱动决策的重要组成部分。然而,进行数据埋点时,也需要注意用户隐私保护,确保数据的收集和使用符合法律法规的要求。

1.3、了解数据埋点的实施要点:

1、掌握产品业务流程:进行有效埋点的前提是理解产品的业务流程,这样才能明确在哪些环节进行数据采集。

2、确立分析目标:埋点的核心目的是为了后续的数据分析,因此要明确分析的目的。不同的目标将导致所需数据和埋点技术的差异,始终牢记初衷。

3、确定采集数据类型:基于分析目标,梳理出需要收集的数据类型,进而确定在产品的哪些部分进行埋点。

1.4、埋点实施方式:

1、自主开发:企业内部研发团队负责在产品中编写统计代码,并构建相应的后台查询系统。

2、利用第三方工具:选用如友盟、神策、Talkingdata、GrowingIO等第三方统计工具进行数据采集。

在产品初期,一般采用第二种方式快速实现数据采集和分析。而对于数据安全要求较高或业务较为复杂的企业,更倾向于采用第一种方式,自行搭建数据采集和分析系统以满足特定需求。

我在这里分享的还是三方的工具——神策埋点,毕竟团队自主编写的埋点系统往往在个人项目或者小型项目中不涉及使用。

1.5、集成神策埋点sdk:

1.,ohpm命令行导入sdk

ohpm install SensorsAnalyticsSDK.har

2、module.json5申请权限

{ \"name\": \"ohos.permission.GET_NETWORK_INFO\", \"reason\": \"$string:Internet_reason\", \"usedScene\": {   \"abilities\": [     \"FormAbility\"   ],   \"when\": \"always\" }},{ \"name\": \"ohos.permission.GET_WIFI_INFO\", \"reason\": \"$string:WIFI_reason\", \"usedScene\": {   \"abilities\": [     \"FormAbility\"   ],   \"when\": \"always\" }},{ \"name\": \"ohos.permission.INTERNET\", \"reason\": \"$string:Internet_reason\", \"usedScene\": {   \"abilities\": [     \"FormAbility\"   ],   \"when\": \"always\" }},

3、初始化

static Init() { //神策埋点注册use方法 sensors.use(SAAutoTrack({   auto_track_types: new Set([     SAAutoTrackType.APP_START,     SAAutoTrackType.APP_END,     SAAutoTrackType.APP_CLICK,     SAAutoTrackType.APP_VIEW_SCREEN   ]), }))​ // 代码埋点初始化 sensors.init({   server_url: CommonConstants.SA_SERVER_URL,   context: getContext(),   show_log: true, //日志记录   app_js_bridge: true, //开启 App 打通 H5   cache_encrypt: true// 内部缓存加密 });​ SensorsdataUtils.registerSuperProperties()}​ //静态公共属性 static registerSuperProperties() {   sensors.register({     platform_name: \'HarmonyOSNext\',     download_channel: \'其他\',     channel_name: \'手机xx\',     sys_language: \'中文\'   }); }

4、自定义埋点

//自定义埋点static setCustomData(eventName: string, obj: EventProps) { try {   sensors.track(eventName, obj)​ } catch (e) {   Logger.info(\'eventName sensorsData-Error\', JSON.stringify(e))​ }}

5、页面计时开始/结束

//开始时间static trackTimerStart(event: string) { return sensors.trackTimerStart(event);}​//暂停计时static trackTimerPause(event: Promise) { try {   sensors.trackTimerPause(event) } catch (e) {   Logger.info(\'trackTimerPause sensorsData-Error\', JSON.stringify(e))​ }}​//结束时间static trackTimerEnd(event: Promise) { try {   sensors.trackTimerEnd(event) } catch (e) {   Logger.info(\'trackTimerEnd sensorsData-Error\', JSON.stringify(e))​ }}

6、其它:

//登录页面按钮点击static setLoginPageclick(parasName: string) { try {   SensorsdataUtils.setCustomData(\'mb_loginPageclick\', { button_name: parasName })​ } catch (e) {   Logger.info(\'mb_loginPageclick sensorsData-Error\', JSON.stringify(e))​ }​}​//按钮点击static setButtonclick(eventName: string, parasName: string) { try {​   SensorsdataUtils.setCustomData(eventName, { button_name: parasName }) } catch (e) {   Logger.info(eventName + \'sensorsData-Error\', JSON.stringify(e))​ }}​// 登录结果static setLoginResult(loginType: string, isSuccess: boolean, msg: string, isCustNum: boolean) {​ let loginResult = {   login_type: loginType,   is_success: isSuccess,   fail_reason: msg,   is_cust_num: isCustNum } as EventProps​ try {   SensorsdataUtils.setCustomData(\'mb_loginResult\', loginResult) } catch (e) {   Logger.info(\'mb_loginResult sensorsData-Error\', JSON.stringify(e))​ }}​//APP安装static setAppInstall() { try {   sensors.trackAppInstall() } catch (e) {   Logger.info(\'AppInstall sensorsData-Error\', JSON.stringify(e)) }}​//频道页浏览static channelView(parasName: string) { // try { SensorsdataUtils.setCustomData(\'mb_channelView\', { page_name: parasName }) return sensors.trackTimerStart(parasName)​ // } catch (e) { //   Logger.info(\'mb_channelView sensorsData-Error\', JSON.stringify(e)) // }}​// 离开页面static channelExit(parasName: string, event: Promise) { try {   SensorsdataUtils.setCustomData(\'mb_channelExit\', { page_name: parasName })   SensorsdataUtils.trackTimerEnd(event) } catch (e) {   Logger.info(\'mb_channelView sensorsData-Error\', JSON.stringify(e)) }}​// 用户表-核心客户号static setUserCust() {​ try {   // 设定用户属性   let cifNo: string = User.UserInfo[\'CifNo\']   if (cifNo && cifNo.length > 0) {     sensors.appendProfile({ sys_cust_num: cifNo });     sensors.appendProfile({ sys_on_phone: User.loginId });   } else {     sensors.appendProfile({ sys_on_phone: User.loginId });   }​ } catch (e) {   Logger.info(\'sys_cust_num sensorsData-Error\', JSON.stringify(e))​ }}​//用户登录static userLogin() { try {​   let cifNo: string = User.UserInfo[\'CifNo\']   if (cifNo && cifNo.length > 0) {​     // sensors.appendProfile({ is_login: User.loginId });     sensors.login(cifNo)​   } } catch (e) {   Logger.info(\'is_login sensorsData-Error\', JSON.stringify(e))​ }}