神策 开源埋点 后端接收前端sdk采集数据

神策数据示例:

预置属性总表格

数据格式

注意:

前后端调试中发现

前端使用 uniapp sdk 时 向后端上报数据 用的get方法

前端使用 web js sdk 时 向后端上报数据 用的post test/plain;charset=UTF-8方法

//        前端上传的数据示例:data=eyJkaXN0aW5jdF9pZCI6Im9JQXRPNmZpT1V6R0hJSVk2VlV0OXRSZU9OMFlfNCIsImxpYiI6eyIkbGliIjoianMiLCIkbGliX21ldGhvZCI6ImNvZGUiLCIkbGliX3ZlcnNpb24iOiIxLjE4LjIwIn0sInByb3BlcnRpZXMiOnsiJHRpbWV6b25lX29mZnNldCI6LTQ4MCwiJHNjcmVlbl9oZWlnaHQiOjg0NCwiJHNjcmVlbl93aWR0aCI6MzkwLCIkbGliIjoianMiLCIkbGliX3ZlcnNpb24iOiIxLjE4LjIwIiwiJGxhdGVzdF90cmFmZmljX3NvdXJjZV90eXBlIjoi55u05o6l5rWB6YePIiwiJGxhdGVzdF9zZWFyY2hfa2V5d29yZCI6IuacquWPluWIsOWAvF%2Fnm7TmjqXmiZPlvIAiLCIkbGF0ZXN0X3JlZmVycmVyIjoiIiwiJGxhdGVzdF9sYW5kaW5nX3BhZ2UiOiJodHRwczovL3Rlc3QuaGVhbHRoLnNpbm9jcmVkaXQueGluL21lZGljYWwtdW5pYXBwLXdlaXhpbi10ZXN0LyMvcGFnZXMvYXBwb2ludG1lbnRkb2N0b3IvUmVnaXN0ZXJlZEhvc3BpdGFsP3NvdXJjZT13eCIsIl9zYV9jaGFubmVsX2xhbmRpbmdfdXJsIjoiIiwiJGlzX2NoYW5uZWxfY2FsbGJhY2tfZXZlbnQiOnRydWUsInVhIjoiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxNV82IGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgTW9iaWxlLzE1RTE0OCBNaWNyb01lc3Nlbmdlci84LjAuMjMoMHgxODAwMTcyZikgTmV0VHlwZS80RyBMYW5ndWFnZS96aF9DTiIsInVybCI6Im1lZGljYWwvbWVkaWNhbGluZm9ybWF0aW9uL2dldEluZm9ybWF0aW9uQXJ0aWNsZUxpc3QvMTAiLCJjb2RlIjowLCJtc2ciOiJzdWNjZXNzIiwiJGlzX2ZpcnN0X2RheSI6ZmFsc2UsIiRsYXRlc3RfcmVmZXJyZXJfaG9zdCI6IiIsIiR1cmwiOiJodHRwczovL3Rlc3QuaGVhbHRoLnNpbm9jcmVkaXQueGluL21lZGljYWwtdW5pYXBwLXdlaXhpbi10ZXN0LyMvcGFnZXMvYXBwb2ludG1lbnRkb2N0b3IvUmVnaXN0ZXJlZEhvc3BpdGFsP3NvdXJjZT13eCIsIiR0aXRsZSI6IumAieaLqeWMu%2BmZoiJ9LCJsb2dpbl9pZCI6Im9JQXRPNmZpT1V6R0hJSVk2VlV0OXRSZU9OMFlfNCIsImFub255bW91c19pZCI6Im9JQXRPNmZpT1V6R0hJSVk2VlV0OXRSZU9OMFkiLCJ0eXBlIjoidHJhY2siLCJldmVudCI6Imh0dHAiLCJ0aW1lIjoxNjYwNzMwMzk0NjIxLCJfdHJhY2tfaWQiOjU4OTM0NjIxLCJfZmx1c2hfdGltZSI6MTY2MDczMDM5NDYyMX0%3D&ext=crc%3D-479460134

controller

    @GetMapping(value = "log")
    @ApiOperation("接受数据埋点日志")
    public void logGet(HttpServletRequest request, String data) throws Exception {
        System.out.println("get data = " + data);
    }

    @PostMapping(value = "log", consumes = "text/plain;charset=UTF-8")
    @ApiOperation("接受数据埋点日志")
    public void logPost(HttpServletRequest request) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
        String buffer = null;
        StringBuffer str = new StringBuffer();
        while ((buffer = br.readLine()) != null) {
            str.append(buffer);
        }
        String data = str.toString();
        if (StrUtil.isNotBlank(data)) {
            String[] dataArray = data.split("&ext=");
            String d = dataArray[0].replaceAll("data=", "");
            System.out.println("post data = " + d);
        }
    }

数据处理

需将接收到的 data= 数据进行 URLDecoder解码 在进行 base64解码

        String urlDecode = URLDecoder.decode(data, "UTF-8");
        String decodeStr = Base64.decodeStr(urlDecode);
        JSONObject jsonObject = JSON.parseObject(decodeStr);
        System.out.println("接受数据埋点日志 data = " + jsonObject.toJSONString());

ip 和 user_agent

前端反馈:uniapp sdk 和 web js sdk 没有默认上报 ip 和 user_agent 

解决 :可前端设置 神策 sdk的公众属性 进行传输 或者 后端 使用 httpServletRequest 解析

### 分析 Java 后端埋点示例 以下是基于神策数据官方 Java 埋点 SDK 的一个典型埋点示例代码。此代码展示了如何初始化 SDK 并发送自定义事件。 #### 初始化 SDK 在使用神策数据Java 埋点 SDK 之前,需要先完成其初始化操作。以下是一个简单的初始化方法: ```java import com.sensorsdata.analytics.java.sdk.SensorsDataAPI; public class SensorsAnalyticsExample { public static void main(String[] args) { // 配置服务器地址和其他参数 String serverUrl = "http://your-server-url"; // 替换为实际的服务端 URL SensorsDataAPI sensorsDataAPI = new SensorsDataAPI.Builder(serverUrl) .withLogLevel(SensorsDataAPI.LogLevel.DEBUG) // 设置日志级别 .build(); // 将实例绑定到当前线程 SensorsDataAPI.setInstance(sensorsDataAPI); } } ``` 上述代码通过 `SensorsDataAPI` 提供的功能完成了 SDK 的基本配置和初始化[^1]。 #### 发送自定义事件 一旦 SDK 被成功初始化,就可以利用它来记录用户的交互行为或其他业务逻辑中的重要事件。下面是一段用于发送自定义事件的代码片段: ```java import com.sensorsdata.analytics.java.sdk.SensorsDataAPI; import java.util.HashMap; import java.util.Map; public class EventTrackingExample { public static void trackCustomEvent() { Map<String, Object> properties = new HashMap<>(); properties.put("category", "electronics"); properties.put("price", 999.0); properties.put("currency", "CNY"); // 使用默认实例发送事件 SensorsDataAPI.getInstance().track("Purchase_Complete", properties); System.out.println("Event 'Purchase_Complete' has been tracked with the following properties:"); properties.forEach((key, value) -> System.out.println(key + ": " + value)); } public static void main(String[] args) { trackCustomEvent(); } } ``` 在此示例中,我们创建了一个名为 `"Purchase_Complete"` 的事件,并附带了一些描述性的属性(如商品类别、价格和货币单位)。这些信息会被传递给神策数据分析平台以便进一步处理和可视化[^2]。 #### 接口扩展支持 如果某些特定需求涉及到更复杂的场景或者需要对接额外的功能模块,则可能需要用到更多的 API 方法以及深入理解相关接口的设计原理。例如,在定义类时可以通过实现指定接口的方式增强灵活性[^3]。 --- ### 注意事项 - **异常处理**:为了提高系统的健壮性,建议对可能出现错误的地方增加适当的 try-catch 结构。 - **性能优化**:对于高并发环境下的应用来说,合理调整缓冲区大小等参数有助于提升整体效率。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值