Skip to content

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
        }
    }
}))