菜单

高级功能(HarmonyOS)

属性插件化

属性插件化是神策鸿蒙 SDK 提供用于修改埋点事件属性的高级功能,用户可通过属性插件化功能实现对指定事件(或所有事件)的属性进行新增、修改和删除。

接口介绍

SDK 提供了 registerPropertyPlugin 方法,通过该方法传入自定义的属性插件对象给指定的事件添加、修改或删除属性。

自定义属性插件对象介绍:

方法名 描述 示例
properties(data)

用于对属性进行修改,data 为发送前的完整数据。

data 包括 SDK 采集的所有数据类型:

item_set、

item_delete、

profile_set、

profile_set_once、

profile_append、

profile_increment、

profile_delete、

profile_unset、track、

track_signup。

可配置该方法中对待发送数据 data 进行属性的添加、删除、修改操作。

{
	properties:function(data){
	  // 添加
	  // data.properties.hello = 'world'
	  
	  // 修改
	  // data.properties.$title = 'new title'
	  
	  // 删除
	  // delete data.properties.$screen_width		
	}
}
isMatchedWithFilter(data)

用于对数据进行筛选,data 为发送前的完整数据。

同上面 data 包括所有数据类型。

如果配置了该方法,仅当该方法返回 true 时,配置的 properties 方法才会得到执行。

如果不配置该方法,则配置的 properties 方法始终执行。

{
	isMatchedWithFilter:function(data){
		// 筛选事件名为 $SignUp 的事件
		if(data.event === '$SignUp'){
			return true;
		}

		// 筛选在页面标题为 home 的事件
		if(data.properties.$title === 'home'){
			return true;
		}
		
		// 其他事件不会执行 properties 方法
		return false;
	}
}

使用示例

  • 常用方法:修改事件名为 $pageview 下的 $url 属性

    sensors.registerPropertyPlugin({
      isMatchedWithFilter:function(data){
    	return data.event === "$pageview";
      }
    
      properties:function(data){
    	data.properties['$url'] = 'http://xxx';
      }
    });
  • 常用方法:删除所有事件中的 platform 属性

    sensors.registerPropertyPlugin({
      isMatchedWithFilter:function(data){
    	return data.type === 'track';
      }
    
      properties:function(data){
    	delete data.properties['platform'];
      }
    });
  • 注意:需要先做事件筛选,再做属性修改。因为 profile、item 等类型的数据也是可以被修改的。

    sensors.registerPropertyPlugin({
      isMatchedWithFilter:function(data){
    	return data.type.slice(0, 4) === 'item' ||  data.type.slice(0, 7) === 'profile';
      }
      properties:function(data){
    	delete data.properties['aaa'] = 'bbb';
      }
    });
  • 对所有类型数据,修改属性值。注意:这种用法一般情况下是错误的,会导致所有数据(包括 profile、item 等)都被修改,引发意想不到的情况

    sensors.registerPropertyPlugin({
        properties:function(data){
        	data.properties['aaa'] = 'bbb';
      }
    });
  • 直接在 properties 里进行筛选和属性修改也是可以的

    sensors.registerPropertyPlugin({
      properties:function(data){
    	if(data.event === '$pageview'){
     		data.properties['$url'] = 'http://xxxx';
    	}
      }
    });

批量发送

注意

  • SDK 版本需要 >= v0.0.5
  • 默认不需要配置 batch_send。
  • 默认使用批量发送,且仅支持批量发送。

详细配置参数如下:

sensors.init({
  batch_send:{
    flush_interval: 15000,
    flush_bulk_size: 50,
    datasend_timeout: 30000,
    max_cache_size: 10000
  }
})
  参数 默认 功能
1 flush_interval 15000 ms 每隔多少秒发送
2 flush_bulk_size 50 条 超出多少条发送
3 datasend_timeout 30000 ms 一次请求的最大超时时间
4 max_cache_size 10000 条 数据库(relationalStore@kit.ArkData')最多存多少条
  • 单独配置 flush_bulk_size 为 1 条的话,可以实现单条立即发送。
  • 批量发送的原理:来一条数据,就存到数据库。存储和发送分离。
  • 发送的时机:
    • 1. 每隔一定时间(flush_interval)
    • 2. 超过配置的条数(flush_bulk_size)
    • 3. 每次 SDK ready(init 初始化完成)

如果想要立即发送缓存的数据,可以调用 flush 方法:

sensors.flush();

国密

注意

  1. HarmonyOS SDK 0.0.5 开始支持国密加密
  2. 确保先 use 注册国密插件,再 init 初始化 SDK,否则无效。
import sensors from '@sensorsdata/analytics';
import {SMEncryption} from '@sensorsdata/analytics';

// 公钥
let pubKey:string = '0437627b638360a7bfdd93652278befcb2ac0c03e249e5799609e5cb74573a7ea570f7ca6bf1a02f7b79cc41335f4d2ce7d1d59b89c1e831bf1b508320c610cb13';

sensors.use(SMEncryption, {
    pkv: <秘钥版本>,
    pub_key: pubKey
});

// SDK 初始化
sensors.init({
   // 服务器接收地址
   server_url: '你的数据接收地址',
   // Ability 上下文
   context: this.context,
   // 是否显示日志
   show_log: true,
   // 开启 App 打通 H5
   app_js_bridge: true   
});

sensors.track('xxx');

这里的 pubkey 和 pkv 参数信息可以通过神策后台【数据管理】 > 【数据接入引导】 > 【客户端埋点】 > 【密钥管理】页面进行获取或通过该页面进行新建。

经纬度

由于经纬度信息是个人信息中敏感数据,且需要 App 用户主动授权方可采集,SDK 不会自动采集经纬度信息。

经纬度的属性在神策中是预置属性,神策提供了以下解决方案:

在获取到坐标或者坐标更新时,调用 SDK 注册公共属性的方法 registerApp,通过该方法将经纬度信息传入。

sensors.registerApp({
  $latitude: latitude * Math.pow(10, 6),
  $longitude: longitude * Math.pow(10, 6),
  $geo_coordinate_system: 'WGS84'
});

参数说明:

  参数 中文名 说明
1 $latitude 纬度 为确保精度,需要乘 10 的 6 次方
2 $longitude 经度 为确保精度,需要乘 10 的 6 次方
3 $geo_coordinate_system 坐标系 WGS84 为标准坐标系,鸿蒙目前是用的标准坐标系。可选的值还包括火星坐标系 GCJ02。
上一个
集成文档(HarmonyOS)
下一个
服务端 SDK
最近修改: 2025-03-17