Skip to content

Commit 2740dfa

Browse files
author
xuchang
committed
Release 3.4.4
1 parent 6ea97c9 commit 2740dfa

32 files changed

+4126
-155
lines changed

SensorsAnalyticsSDK/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<groupId>com.sensorsdata.analytics.javasdk</groupId>
1616
<name>SensorsAnalyticsSDK</name>
1717
<artifactId>SensorsAnalyticsSDK</artifactId>
18-
<version>3.4.3</version>
18+
<version>3.4.4</version>
1919
<description>The official Java SDK of Sensors Analytics</description>
2020
<url>http://sensorsdata.cn</url>
2121

@@ -37,7 +37,7 @@
3737
<project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
3838
<jdk.version>1.7</jdk.version>
3939
<httpclient.version>4.5.13</httpclient.version>
40-
<jackson-databind.version>2.9.10.7</jackson-databind.version>
40+
<jackson-databind.version>2.9.10.8</jackson-databind.version>
4141
<lombok.version>1.18.20</lombok.version>
4242
<junit.version>4.11</junit.version>
4343
<slf4j.version>1.7.25</slf4j.version>

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsAnalytics.java

Lines changed: 99 additions & 45 deletions
Large diffs are not rendered by default.

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsAnalyticsWorker.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class SensorsAnalyticsWorker {
3232

3333
private final Consumer consumer;
3434

35-
private final Map<String, Object> superProperties = new ConcurrentHashMap<String, Object>();
35+
private final Map<String, Object> superProperties = new ConcurrentHashMap<>();
3636

3737
private boolean enableTimeFree = false;
3838

@@ -157,7 +157,7 @@ void shutdown() {
157157
private Map<String, Object> generateEventMap(String distinctId, Boolean isLoginId, String originDistinctId,
158158
Map<String, String> identity, String actionType, String eventName, Map<String, Object> properties) {
159159
Map<String, Object> eventMap = new HashMap<>();
160-
eventMap.put("_track_id", new Random().nextInt());
160+
eventMap.put("_track_id", SensorsAnalyticsUtil.getTrackId(properties, distinctId));
161161
eventMap.put("type", actionType);
162162
eventMap.put("lib", getLibProperties());
163163
//开启历史数据导入

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsConst.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ private SensorsConst() {
1515
/**
1616
* 当前JDK版本号,注意要和pom文件里面的version保持一致
1717
*/
18-
public static final String SDK_VERSION = "3.4.3";
18+
public static final String SDK_VERSION = "3.4.4";
1919
/**
2020
* 当前语言类型
2121
*/
@@ -38,6 +38,9 @@ private SensorsConst() {
3838
*/
3939
public static final String BIND_ID_ACTION_TYPE = "track_id_bind";
4040
public static final String UNBIND_ID_ACTION_TYPE = "track_id_unbind";
41+
42+
public static final String ITEM_TYPE = "Item Type";
43+
public static final String ITEM_ID = "Item Id";
4144
/**
4245
* 绑定事件名称
4346
*/
@@ -46,9 +49,12 @@ private SensorsConst() {
4649
* 解绑事件名称
4750
*/
4851
public static final String UNBIND_ID = "$UnbindID";
52+
53+
public static final String PROPERTIES = "properties";
4954
/**
5055
* 系统预置属性
5156
*/
57+
public static final String TRACK_ID = "$track_id";
5258
public static final String PROJECT_SYSTEM_ATTR = "$project";
5359
public static final String TIME_SYSTEM_ATTR = "$time";
5460
public static final String TOKEN_SYSTEM_ATTR = "$token";

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsData.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import static com.sensorsdata.analytics.javasdk.SensorsConst.TRACK_ACTION_TYPE;
44

5+
import com.sensorsdata.analytics.javasdk.bean.EventRecord;
56
import com.sensorsdata.analytics.javasdk.bean.IDMEventRecord;
67
import com.sensorsdata.analytics.javasdk.bean.IDMUserRecord;
8+
import com.sensorsdata.analytics.javasdk.bean.ItemRecord;
9+
import com.sensorsdata.analytics.javasdk.bean.UserRecord;
710
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
811

912
import lombok.Getter;
@@ -12,7 +15,6 @@
1215
import java.util.Date;
1316
import java.util.HashMap;
1417
import java.util.Map;
15-
import java.util.Random;
1618

1719
/**
1820
* 神策数据格式
@@ -77,18 +79,38 @@ class SensorsData {
7779
*/
7880
private String itemId;
7981

82+
protected SensorsData(EventRecord eventRecord, String actionType) {
83+
this(eventRecord.getDistinctId(), eventRecord.getOriginalId(), null, actionType, eventRecord.getEventName(),
84+
eventRecord.getPropertyMap(), null, null, eventRecord.getTrackId());
85+
}
86+
87+
protected SensorsData(ItemRecord itemRecord, String actionType ) {
88+
this(null,null,null,actionType,null,itemRecord.getPropertyMap(),
89+
itemRecord.getItemType(),itemRecord.getItemId(), itemRecord.getTrackId());
90+
}
91+
92+
protected SensorsData (UserRecord userRecord, String actionType) {
93+
this(userRecord.getDistinctId(), actionType, null, userRecord.getPropertyMap(), userRecord.getTrackId());
94+
}
95+
8096
protected SensorsData(IDMUserRecord userRecord, String actionType) {
81-
this(userRecord.getDistinctId(), actionType, userRecord.getIdentityMap(), userRecord.getPropertyMap());
97+
this(userRecord.getDistinctId(), actionType, userRecord.getIdentityMap(), userRecord.getPropertyMap(),
98+
userRecord.getTrackId());
8299
}
83100

84101
protected SensorsData(IDMEventRecord eventRecord) {
85102
this(eventRecord.getDistinctId(), eventRecord.getIdentityMap(), eventRecord.getEventName(),
86-
eventRecord.getPropertyMap());
103+
eventRecord.getPropertyMap(), eventRecord.getTrackId());
104+
}
105+
106+
protected SensorsData(IDMEventRecord eventRecord, String actionType) {
107+
this(eventRecord.getDistinctId(), null, eventRecord.getIdentityMap(), actionType,
108+
eventRecord.getEventName(), eventRecord.getPropertyMap(), null, null, eventRecord.getTrackId());
87109
}
88110

89111
protected SensorsData(String distinctId, String type, Map<String, String> identities,
90-
Map<String, Object> properties) {
91-
this(distinctId, null, identities, type, null, properties, null, null);
112+
Map<String, Object> properties, Integer trackId) {
113+
this(distinctId, null, identities, type, null, properties, null, null, trackId);
92114
}
93115

94116
/**
@@ -99,13 +121,13 @@ protected SensorsData(String distinctId, String type, Map<String, String> identi
99121
* @param properties 事件属性集合
100122
*/
101123
protected SensorsData(String distinctId, Map<String, String> identities, String event,
102-
Map<String, Object> properties) {
103-
this(distinctId, null, identities, TRACK_ACTION_TYPE, event, properties, null, null);
124+
Map<String, Object> properties, Integer trackId) {
125+
this(distinctId, null, identities, TRACK_ACTION_TYPE, event, properties, null, null, trackId);
104126
}
105127

106128
private SensorsData(String distinctId, String originalId, Map<String, String> identities, String type, String event,
107-
Map<String, Object> properties, String itemType, String itemId) {
108-
this.trackId = new Random().nextInt();
129+
Map<String, Object> properties, String itemType, String itemId, Integer trackId) {
130+
this.trackId = trackId;
109131
this.distinctId = distinctId;
110132
this.originalId = originalId;
111133
this.identities = identities;
@@ -118,6 +140,7 @@ private SensorsData(String distinctId, String originalId, Map<String, String> id
118140
this.itemId = itemId;
119141
}
120142

143+
121144
protected static Map<String, Object> generateData(SensorsData sensorsData) {
122145
Map<String, Object> eventMap = new HashMap<>();
123146
if (sensorsData.getTrackId() != null) {
@@ -156,6 +179,9 @@ protected static Map<String, Object> generateData(SensorsData sensorsData) {
156179
eventMap.put("item_type", sensorsData.getItemType());
157180
}
158181
if (sensorsData.getProperties() != null) {
182+
if (sensorsData.getTrackId() != null) {
183+
sensorsData.getProperties().remove(SensorsConst.TRACK_ID);
184+
}
159185
eventMap.put("properties", sensorsData.getProperties());
160186
}
161187
return eventMap;

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/EventRecord.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.sensorsdata.analytics.javasdk.bean;
22

3+
import com.sensorsdata.analytics.javasdk.SensorsConst;
34
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
5+
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
46

57
import java.io.Serializable;
68
import java.util.Date;
@@ -22,11 +24,21 @@ public class EventRecord implements Serializable {
2224

2325
private final Boolean isLoginId;
2426

25-
private EventRecord(String eventName, String distinctId, Boolean isLoginId, Map<String, Object> propertyMap) {
27+
private final Integer trackId;
28+
29+
private final String originalId;
30+
31+
private EventRecord(String eventName, String distinctId, Boolean isLoginId, Map<String, Object> propertyMap,
32+
Integer trackId, String originalId) {
2633
this.eventName = eventName;
2734
this.distinctId = distinctId;
2835
this.isLoginId = isLoginId;
36+
if (isLoginId) {
37+
propertyMap.put(SensorsConst.LOGIN_SYSTEM_ATTR, true);
38+
}
2939
this.propertyMap = propertyMap;
40+
this.trackId = trackId;
41+
this.originalId = originalId;
3042
}
3143

3244
@Override
@@ -59,16 +71,24 @@ public Boolean getIsLoginId() {
5971
return isLoginId;
6072
}
6173

74+
public String getOriginalId() {
75+
return originalId;
76+
}
77+
78+
public Integer getTrackId() {return trackId; }
79+
6280
public static class Builder {
63-
private final Map<String, Object> propertyMap = new HashMap<String, Object>();
81+
private final Map<String, Object> propertyMap = new HashMap<>();
6482
private String eventName;
6583
private String distinctId;
6684
private Boolean isLoginId;
85+
private Integer trackId;
86+
private String originalId;
6787

6888
private Builder() {
6989
}
70-
7190
public EventRecord build() throws InvalidArgumentException {
91+
7292
if (eventName == null) {
7393
throw new InvalidArgumentException("The eventName is empty.");
7494
}
@@ -78,7 +98,16 @@ public EventRecord build() throws InvalidArgumentException {
7898
if (isLoginId == null) {
7999
throw new InvalidArgumentException("The isLoginId is empty.");
80100
}
81-
return new EventRecord(eventName, distinctId, isLoginId, propertyMap);
101+
SensorsAnalyticsUtil.assertKey("event_name",eventName);
102+
SensorsAnalyticsUtil.assertValue("distinct_id", distinctId);
103+
String message = String.format("[distinct_id=%s,event_name=%s,is_login_id=%s]",distinctId,eventName,isLoginId);
104+
trackId = SensorsAnalyticsUtil.getTrackId(propertyMap, message);
105+
return new EventRecord(eventName, distinctId, isLoginId, propertyMap,trackId, originalId);
106+
}
107+
108+
public EventRecord.Builder setOriginalId(String originalId) {
109+
this.originalId = originalId;
110+
return this;
82111
}
83112

84113
public EventRecord.Builder setEventName(String eventName) {

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/IDMEventRecord.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.sensorsdata.analytics.javasdk.bean;
22

3-
import static com.sensorsdata.analytics.javasdk.SensorsConst.LOGIN_SYSTEM_ATTR;
43
import static com.sensorsdata.analytics.javasdk.SensorsConst.TRACK_ACTION_TYPE;
54

5+
import com.sensorsdata.analytics.javasdk.SensorsConst;
66
import com.sensorsdata.analytics.javasdk.common.Pair;
77
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
88
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
@@ -44,12 +44,16 @@ public class IDMEventRecord extends SensorsAnalyticsIdentity {
4444
*/
4545
private final Map<String, Object> propertyMap;
4646

47+
private final Integer trackId;
48+
49+
4750
private IDMEventRecord(Map<String, String> identityMap, String eventName, String distinctId,
48-
Map<String, Object> propertyMap) {
51+
Map<String, Object> propertyMap, Integer trackId) {
4952
super(identityMap);
5053
this.eventName = eventName;
5154
this.distinctId = distinctId;
5255
this.propertyMap = propertyMap;
56+
this.trackId = trackId;
5357
}
5458

5559
public static IDMBuilder starter() {
@@ -62,6 +66,7 @@ public static class IDMBuilder {
6266
private final Map<String, Object> propertyMap = new HashMap<>();
6367
private String eventName;
6468
private String distinctId;
69+
private Integer trackId;
6570

6671
public IDMEventRecord build() throws InvalidArgumentException {
6772
SensorsAnalyticsUtil.assertKey("event_name", eventName);
@@ -73,8 +78,12 @@ public IDMEventRecord build() throws InvalidArgumentException {
7378
}
7479
Pair<String, Boolean> resPair =
7580
SensorsAnalyticsUtil.checkIdentitiesAndGenerateDistinctId(distinctId, idMap);
76-
propertyMap.put(LOGIN_SYSTEM_ATTR, resPair.getValue());
77-
return new IDMEventRecord(idMap, eventName, resPair.getKey(), propertyMap);
81+
if (resPair.getValue()) {
82+
propertyMap.put(SensorsConst.LOGIN_SYSTEM_ATTR, true);
83+
}
84+
String message = String.format("[distinct_id=%s,event_name=%s]",distinctId,eventName);
85+
trackId = SensorsAnalyticsUtil.getTrackId(propertyMap, message);
86+
return new IDMEventRecord(idMap, eventName, resPair.getKey(), propertyMap,trackId);
7887
}
7988

8089
public IDMEventRecord.IDMBuilder identityMap(Map<String, String> identityMap) {
@@ -97,7 +106,6 @@ public IDMEventRecord.IDMBuilder setEventName(@NonNull String eventName) {
97106
public IDMEventRecord.IDMBuilder setDistinctId(@NonNull String distinctId) {
98107
this.distinctId = distinctId;
99108
// IDM3.0 设置 distinctId,设置 $is_login_id = false,其实也可不设置
100-
propertyMap.put(LOGIN_SYSTEM_ATTR, false);
101109
return this;
102110
}
103111

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/IDMUserRecord.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.sensorsdata.analytics.javasdk.bean;
22

3-
import static com.sensorsdata.analytics.javasdk.SensorsConst.LOGIN_SYSTEM_ATTR;
43

4+
import com.sensorsdata.analytics.javasdk.SensorsConst;
55
import com.sensorsdata.analytics.javasdk.common.Pair;
66
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
77
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
@@ -35,10 +35,14 @@ public class IDMUserRecord extends SensorsAnalyticsIdentity {
3535

3636
private final String distinctId;
3737

38-
private IDMUserRecord(Map<String, String> identityMap, Map<String, Object> propertyMap, String distinctId) {
38+
private final Integer trackId;
39+
40+
private IDMUserRecord(Map<String, String> identityMap, Map<String, Object> propertyMap, String distinctId,
41+
Integer trackId) {
3942
super(identityMap);
4043
this.propertyMap = propertyMap;
4144
this.distinctId = distinctId;
45+
this.trackId = trackId;
4246
}
4347

4448
public static IDMBuilder starter() {
@@ -50,12 +54,18 @@ public static class IDMBuilder {
5054
private final Map<String, String> idMap = new LinkedHashMap<>();
5155
private String distinctId;
5256
private final Map<String, Object> propertyMap = new HashMap<>();
57+
private Integer trackId;
5358

5459
public IDMUserRecord build() throws InvalidArgumentException {
5560
Pair<String, Boolean> resPair =
5661
SensorsAnalyticsUtil.checkIdentitiesAndGenerateDistinctId(distinctId, idMap);
57-
propertyMap.put(LOGIN_SYSTEM_ATTR, resPair.getValue());
58-
return new IDMUserRecord(idMap, propertyMap, resPair.getKey());
62+
if (resPair.getValue()) {
63+
propertyMap.put(SensorsConst.LOGIN_SYSTEM_ATTR, true);
64+
}
65+
// 填充 distinct_id 和 目标表
66+
String message = String.format("[distinct_id=%s,target_table=user]",distinctId);
67+
trackId = SensorsAnalyticsUtil.getTrackId(propertyMap, message);
68+
return new IDMUserRecord(idMap, propertyMap, resPair.getKey(), trackId);
5969
}
6070

6171
public IDMUserRecord.IDMBuilder identityMap(Map<String, String> identityMap) {
@@ -73,7 +83,6 @@ public IDMUserRecord.IDMBuilder addIdentityProperty(String key, String value) {
7383
public IDMUserRecord.IDMBuilder setDistinctId(@NonNull String distinctId) {
7484
this.distinctId = distinctId;
7585
// IDM3.0 设置 distinctId,设置 $is_login_id = false,其实也可不设置
76-
propertyMap.put(LOGIN_SYSTEM_ATTR, false);
7786
return this;
7887
}
7988

0 commit comments

Comments
 (0)