Data Collection Desensitization¶
If you want to fully desensitize a field, it is recommended to use setDataModifier, which offers better performance. For detailed rule replacement, setLineDataModifier is recommended.
Do not use complex or high-latency methods in the callback method, as this will significantly affect the SDK's data writing performance.
FTSdk.install(
FTSDKConfig.builder("xxx")
.setDataModifier(new DataModifier() {
/**
* Modify a specific field
*
* @param key Field name
* @param value Field value (original value)
* @return New value. Return null to indicate no change.
*/
@Override
public Object modify(String key, Object value) {
if (key.equals("device_uuid")) {
return "xxx";
}
return null;
}
}).setLineDataModifier(new LineDataModifier() {
/***
* Modify a single row of data
*
* @param measurement Data measurement type: view, action, resource,
* longtask, error, df_rum_android_log
* @param data Key-value pairs of the original data
* @return Key-value pairs to be modified. (Returning null or an empty map indicates no change.)
*/
@Override
public Map<String, Object> modify(String measurement, HashMap<String, Object> data) {
if(measurement.equals("view")){
HashMap<String,Object> changeMap = new HashMap<String,Object>();
changeMap.put("view_url", "xxx");
}
return null;
}
}))
FTSdk.install(
FTSDKConfig.builder("xxx")
.setDataModifier(object : DataModifier {
/**
* Modify a specific field
*
* @param key Field name
* @param value Field value (original value)
* @return New value. Return null to indicate no change.
*/
override fun modify(key: String, value: Any?): Any? {
return if (key == "device_uuid") {
"xxx" // Replace with a custom device_uuid
} else {
null
}
}
})
// Batch modify certain fields in a single piece of data
.setLineDataModifier(object : LineDataModifier {
/**
* Modify a single row of data
*
* @param measurement Data measurement type: view, action, resource,
* longtask, error, df_rum_android_log
* @param data Key-value pairs of the original data
* @return Key-value pairs to be modified. (Returning null or an empty map indicates no change.)
*/
override fun modify(
measurement: String,
data: HashMap<String, Any>
): Map<String, Any>? {
return if (measurement == "view") {
hashMapOf("view_url" to "xxx")
} else {
null
}
}
}))