Java SDK 快速接入

最后更新于:2019-04-03 16:05:52

在使用前,请先阅读数据模型的介绍。

1. 事件设计表(示例)

事件设计表一般是由神策分析师和你们对接的同事,针对具体业务需求一起梳理的需要做埋点的 Excel 表。

事件和用户属性设计
事件表 用户表
事件名 事件属性 数据类型 用户属性 数据类型
商品浏览( ViewProduct ) 商品 ID( ProductId ) 字符串(String) 用户等级属性( Level ) 字符串(String)

2. 引入及初始化 SDK

引入 SDK

方式一:推荐使用Maven管理 Java 项目,在 pom.xml 文件中,添加以下依赖信息

<dependencies>
  // ...
  <dependency>
    <groupId>com.sensorsdata.analytics.javasdk</groupId>
    <artifactId>SensorsAnalyticsSDK</artifactId>
    <version>3.1.10</version>
  </dependency>
</dependencies>

方式二:源码继承这个文件 SensorsAnalytics.java,代码链接

初始化 SDK

建议采用 ConcurrentLoggingConsumer + LogAgent 的方式进行数据采集,这样采集的好处是:数据实时导入 + 本地日志备份。 ConcurrentLoggingConsumer 配置方式如下

// 使用 ConcurrentLoggingConsumer 初始化 SensorsAnalytics
// 将数据输出到 /data/sa 下的 access.log.2018-05-21 文件中,每天一个文件
final SensorsAnalytics sa = new SensorsAnalytics(
        new SensorsAnalytics.ConcurrentLoggingConsumer("/data/sa/access.log"));

3. 自定义事件追踪

SDK 初始化成功后,即可以通过

sa.track(distinct_id,is_login_id,event_name,properties)

记录事件: 例如:埋点 “ViewProduct” 事件,事件属性有商品 ID,商品类别,是否加入收藏夹。

// 用户的 Distinct Id
String distinctId = “ABCDEF123456789";
// 用户浏览商品
{
  Map<String, Object> properties = new HashMap<String, Object>();
  properties.put("ProductId", “123456");   // 商品 ID
  properties.put("ProductCatalog", "Laptop Computer”);   // 商品类别
  properties.put("isAddedToFav", true);  // 是否加入收藏夹,Boolean 类型的属性
  // 记录用户浏览商品事件
  sa.track(distinctId, true, "ViewProduct", properties);
}

4. 设置用户属性

可以使用 profileSet 方法设置用户属性,如年龄、性别等。 例如:设置用户的 “sex” 为 “男”。

String distinctId = "ABCDEF123456789";

// 设置用户性别属性(Sex)为男性
sa.profileSet(distinctId, true, "Sex", "Male");

Map<String, Object> properties = new HashMap<String, Object>();
// 设置用户等级属性(Level)为 VIP
properties.put("UserLv", "Elite VIP");

sa.profileSet(distinctId, true, properties);

5. 用户标识

详细的说明请参考如何准确的标识用户,必要时联系我们的技术支持人员。 对于未注册的匿名用户: 如果使用了神策前端 SDK,那么前端 SDK 会自动生成一个匿名 ID, 如果您没有使用前端 SDK (JS SDK / iOS SDK / Android SDK),则服务端也要生成一个随机 ID 作为用户标识 distinct_id。每一个随机 ID 被认为一个独立的用户。
注意:
所有的 track 和 profile 系列方法都必须同时指定用户 ID 及用户 ID 是否为登录 ID 这两个参数,以便明确告知 Sensors Analytics 用户 ID 的类型。 当同一个用户的 distinct_id 发生变化时(一般情况为匿名用户注册行为),可以通过 trackSignUp() 将旧的 distinct_id 和新的 distinct_id 关联,以保证用户分析的准确性。例如:

String anonymousId = "JKER1232JKJFD7217";
// 未注册前的匿名用户浏览商品
sa.track(anonymousId, false, “ViewProduct”);

String registerId = "shence123";
// 用户注册,将用户注册 ID 与 匿名 ID 关联
sa.trackSignUp(registerId, anonymousId);

// 记录用户浏览商品事件,此时系统会认为,用户 `shence123` 有两次浏览商品行为
sa.track(registerId, true, "ViewProduct");

6. Demo

package com.sensorsdata.analytics.javasdk;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;

public class HelloSensorsAnalytics {    
    public static void main(String[] args) throws Exception {

    final SensorsAnalytics sa = new SensorsAnalytics(
            new SensorsAnalytics.ConcurrentLoggingConsumer(“/home/work/app/logs/access_log")); 

    String anonymousId = "JKER1232JKJFD7217"; // 用户未登录时,可以使用神策前端 SDK 生成的匿名 id 来标识用户
    // 匿名状态下的浏览商品事件
    sa.track(anonymousId, false, "ViewProduct");

    String registerId = "shence123";
    // 用户注册或者登录,将用户真实 ID 与 匿名 ID 关联
    sa.trackSignUp(registerId, anonymousId);

    Map<String, Object> properties = new HashMap<String, Object>();
    properties.clear();
    //把 IP 传递给 SA,SA 会自动根据这个解析国家、省份、城市
    properties.put("$ip", "123.123.123.123"); 
    // 商品 ID
    properties.put("ProductId", "123456"); 
    // 商品类别
    properties.put("ProductCatalog", "Laptop Computer");
    // 登录状态下的浏览商品事件
    sa.track(registerId, true, "viewProduct", properties);   
    sa.flush();  //立即发送缓存中的所有日志       
    sa.shutdown();   // 关闭 API,关闭时会自动调用 flush
    }
}

生成的日志文件如下:

7. LogAgent

LogAgent 场景示例