1. 属性插件化

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

1.1. 接口介绍

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

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

方法名描述示例
properties(data)

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

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

profile_set、

profile_set_once、

profile_append、

profile_increment、

track、

track_signup 。


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

{
	properties:function(data){
	  // 添加
	  // data.properties.hello = 'world'
	  
	  // 修改
	  // data.properties.$title = 'new title'
	  
	  // 删除
	  // delete data.properties.$screen_width		
	}
}
JS
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;
	}
}
JS

1.2. 使用示例

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

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

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

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

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

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