Java SDK 快速接入
最后更新于:2018-08-14 10:59:52
在使用前,请先阅读数据模型的介绍。
1. 事件设计表(示例)
事件设计表一般是由神策分析师和你们对接的同事,针对具体业务需求一起梳理的需要做埋点的 Excel 表。
事件和用户属性设计 | ||
事件表 | 用户表 | |
事件名 | 事件属性 | 用户属性 |
商品浏览( ViewProduct ) | 商品 ID( ProductId ) | 用户等级属性( Level ) |
2. 引入及初始化 SDK
引入 SDK
方式一:推荐使用Maven管理 Java 项目,在 pom.xml 文件中,添加以下依赖信息
<dependencies>
// ...
<dependency>
<groupId>com.sensorsdata.analytics.javasdk</groupId>
<artifactId>SensorsAnalyticsSDK</artifactId>
<version>3.1.6</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
}
}
生成的日志文件如下: