Skip to content

Commit 37b7299

Browse files
author
weiqiangliu
committed
Release 3.6.3
1 parent 789152a commit 37b7299

20 files changed

Lines changed: 377 additions & 348 deletions

SensorsAnalyticsSDK/pom.xml

Lines changed: 1 addition & 1 deletion
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.6.2</version>
18+
<version>3.6.3</version>
1919
<description>The official Java SDK of Sensors Analytics</description>
2020
<url>http://sensorsdata.cn</url>
2121

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import com.sensorsdata.analytics.javasdk.bean.SensorsAnalyticsIdentity;
88
import com.sensorsdata.analytics.javasdk.bean.SuperPropertiesRecord;
99
import com.sensorsdata.analytics.javasdk.bean.UserRecord;
10+
import com.sensorsdata.analytics.javasdk.bean.schema.DetailSchema;
1011
import com.sensorsdata.analytics.javasdk.bean.schema.IdentitySchema;
1112
import com.sensorsdata.analytics.javasdk.bean.schema.ItemEventSchema;
1213
import com.sensorsdata.analytics.javasdk.bean.schema.ItemSchema;
1314
import com.sensorsdata.analytics.javasdk.bean.schema.UserEventSchema;
14-
import com.sensorsdata.analytics.javasdk.bean.schema.UserItemSchema;
1515
import com.sensorsdata.analytics.javasdk.bean.schema.UserSchema;
1616
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
1717

@@ -613,9 +613,21 @@ void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonN
613613

614614
void itemDelete(@NonNull ItemSchema itemSchema) throws InvalidArgumentException;
615615

616-
void itemSet(@NonNull UserItemSchema userItemSchema) throws InvalidArgumentException;
616+
/**
617+
* 添加一条明细数据
618+
*
619+
* @param detailSchema 明细数据参数
620+
* @throws InvalidArgumentException 参数不合法异常
621+
*/
622+
void detailSet(@NonNull DetailSchema detailSchema) throws InvalidArgumentException;
617623

618-
void itemDelete(@NonNull UserItemSchema userItemSchema) throws InvalidArgumentException;
624+
/**
625+
* 删除一条明细数据
626+
*
627+
* @param detailSchema -明细数据参数
628+
* @throws InvalidArgumentException - 参数不合法异常
629+
*/
630+
void detailDelete(@NonNull DetailSchema detailSchema) throws InvalidArgumentException;
619631

620632
/**
621633
* 立即发送缓存中的所有日志

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static com.sensorsdata.analytics.javasdk.SensorsConst.BIND_ID;
44
import static com.sensorsdata.analytics.javasdk.SensorsConst.BIND_ID_ACTION_TYPE;
5+
import static com.sensorsdata.analytics.javasdk.SensorsConst.DETAIL_DELETE_ACTION_TYPE;
6+
import static com.sensorsdata.analytics.javasdk.SensorsConst.DETAIL_SET_ACTION_TYPE;
57
import static com.sensorsdata.analytics.javasdk.SensorsConst.ITEM_DELETE_ACTION_TYPE;
68
import static com.sensorsdata.analytics.javasdk.SensorsConst.ITEM_SET_ACTION_TYPE;
79
import static com.sensorsdata.analytics.javasdk.SensorsConst.LIB;
@@ -28,11 +30,11 @@
2830
import com.sensorsdata.analytics.javasdk.bean.SensorsAnalyticsIdentity;
2931
import com.sensorsdata.analytics.javasdk.bean.SuperPropertiesRecord;
3032
import com.sensorsdata.analytics.javasdk.bean.UserRecord;
33+
import com.sensorsdata.analytics.javasdk.bean.schema.DetailSchema;
3134
import com.sensorsdata.analytics.javasdk.bean.schema.IdentitySchema;
3235
import com.sensorsdata.analytics.javasdk.bean.schema.ItemEventSchema;
3336
import com.sensorsdata.analytics.javasdk.bean.schema.ItemSchema;
3437
import com.sensorsdata.analytics.javasdk.bean.schema.UserEventSchema;
35-
import com.sensorsdata.analytics.javasdk.bean.schema.UserItemSchema;
3638
import com.sensorsdata.analytics.javasdk.bean.schema.UserSchema;
3739
import com.sensorsdata.analytics.javasdk.consumer.Consumer;
3840
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
@@ -580,13 +582,13 @@ public void itemDelete(@NonNull ItemSchema itemSchema) throws InvalidArgumentExc
580582
}
581583

582584
@Override
583-
public void itemSet(@NonNull UserItemSchema userItemSchema) throws InvalidArgumentException {
584-
worker.doSchemaData(new SensorsSchemaData(userItemSchema, ITEM_SET_ACTION_TYPE));
585+
public void detailSet(@NonNull DetailSchema detailSchema) throws InvalidArgumentException {
586+
worker.doSchemaData(new SensorsSchemaData(detailSchema, DETAIL_SET_ACTION_TYPE));
585587
}
586588

587589
@Override
588-
public void itemDelete(@NonNull UserItemSchema userItemSchema) throws InvalidArgumentException {
589-
worker.doSchemaData(new SensorsSchemaData(userItemSchema, ITEM_DELETE_ACTION_TYPE));
590+
public void detailDelete(@NonNull DetailSchema detailSchema) throws InvalidArgumentException {
591+
worker.doSchemaData(new SensorsSchemaData(detailSchema, DETAIL_DELETE_ACTION_TYPE));
590592
}
591593

592594
@Override

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

Lines changed: 4 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.6.2";
18+
public static final String SDK_VERSION = "3.6.3";
1919
/**
2020
* 当前语言类型
2121
*/
@@ -48,6 +48,9 @@ private SensorsConst() {
4848
public static final String PROFILE_DELETE_ACTION_TYPE = "profile_delete";
4949
public static final String ITEM_SET_ACTION_TYPE = "item_set";
5050
public static final String ITEM_DELETE_ACTION_TYPE = "item_delete";
51+
public static final String DETAIL_SET_ACTION_TYPE = "detail_set";
52+
public static final String DETAIL_DELETE_ACTION_TYPE = "detail_delete";
53+
5154
/**
5255
* ID-Mapping
5356
*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import java.util.Map;
1818

1919
/**
20-
* 神策数据格式
20+
* 神策数据格式(IDM2.0 和 IDM3.0 格式的数据)
2121
*
2222
* @author fangzhuo
2323
* @version 1.0.0

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

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import static com.sensorsdata.analytics.javasdk.SensorsConst.TRACK_ACTION_TYPE;
44
import static com.sensorsdata.analytics.javasdk.SensorsConst.TRACK_SIGN_UP_ACTION_TYPE;
55

6+
import com.sensorsdata.analytics.javasdk.bean.schema.DetailSchema;
67
import com.sensorsdata.analytics.javasdk.bean.schema.ItemEventSchema;
78
import com.sensorsdata.analytics.javasdk.bean.schema.ItemSchema;
89
import com.sensorsdata.analytics.javasdk.bean.schema.UserEventSchema;
9-
import com.sensorsdata.analytics.javasdk.bean.schema.UserItemSchema;
1010
import com.sensorsdata.analytics.javasdk.bean.schema.UserSchema;
1111
import com.sensorsdata.analytics.javasdk.common.Pair;
1212
import com.sensorsdata.analytics.javasdk.common.SchemaTypeEnum;
@@ -17,7 +17,7 @@
1717
import java.util.Map;
1818

1919
/**
20-
* TODO
20+
* 神策多实体数据
2121
*
2222
* @author fangzhuo
2323
* @version 1.0.0
@@ -32,6 +32,8 @@ class SensorsSchemaData extends SensorsData {
3232

3333
private Long userId;
3434

35+
private String detailId;
36+
3537
private Pair<String, String> itemEventPair;
3638

3739
private SchemaTypeEnum schemaTypeEnum;
@@ -70,13 +72,14 @@ protected SensorsSchemaData(UserSchema userSchema, String actionType) {
7072
this.schemaTypeEnum = SchemaTypeEnum.USER;
7173
}
7274

73-
74-
protected SensorsSchemaData(UserItemSchema userItemSchema, String actionType) {
75-
super(userItemSchema.getTrackId(), userItemSchema.getDistinctId(), userItemSchema.getIdentityMap(),
76-
userItemSchema.getItemId(), actionType, null, userItemSchema.getProperties());
77-
this.schema = userItemSchema.getSchema();
78-
this.userId = userItemSchema.getUserId();
79-
this.schemaTypeEnum = SchemaTypeEnum.USER_ITEM;
75+
protected SensorsSchemaData(DetailSchema detailSchema, String actionType) {
76+
super(detailSchema.getTrackId(), detailSchema.getDistinctId(), detailSchema.getIdentities(),
77+
null, actionType, null,
78+
detailSchema.getProperties());
79+
this.schema = detailSchema.getSchema();
80+
this.itemEventPair = detailSchema.getItemPair();
81+
this.detailId = detailSchema.getDetailId();
82+
this.schemaTypeEnum = SchemaTypeEnum.DETAIL;
8083
}
8184

8285
public Map<String, Object> generateData() {
@@ -114,6 +117,14 @@ public Map<String, Object> generateData() {
114117
data.put("id", getItemId());
115118
checkUserIdAndAddUser(getProperties(), "user_id");
116119
break;
120+
case DETAIL:
121+
data.put("id", detailId);
122+
if (itemEventPair != null) {
123+
getProperties().put(itemEventPair.getKey(), itemEventPair.getValue());
124+
}
125+
if (!getIdentities().isEmpty()) {
126+
checkUserIdAndAddUser(getProperties(), "user_id");
127+
}
117128
default:
118129
break;
119130
}
@@ -153,9 +164,11 @@ private void addTimeFree(Map<String, Object> data) {
153164
private void checkUserIdAndAddUser(Map<String, Object> data, String key) {
154165
if (null != getUserId()) {
155166
data.put(key, getUserId());
156-
} else {
167+
} else if (null != getIdentities() && !getIdentities().isEmpty()) {
157168
data.put("identities", getIdentities());
158169
}
159-
data.put("distinct_id", getDistinctId());
170+
if (null != getDistinctId()) {
171+
data.put("distinct_id", getDistinctId());
172+
}
160173
}
161174
}
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package com.sensorsdata.analytics.javasdk.bean.schema;
2+
3+
import com.sensorsdata.analytics.javasdk.common.Pair;
4+
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
5+
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
6+
7+
import lombok.Getter;
8+
import lombok.NonNull;
9+
10+
import java.util.Date;
11+
import java.util.HashMap;
12+
import java.util.LinkedHashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
/**
17+
* 明细数据入参
18+
*
19+
* @author fangzhuo
20+
* @version 1.0.0
21+
* @since 2023/03/21 11:19
22+
*/
23+
@Getter
24+
public class DetailSchema {
25+
/**
26+
* detail 对应的 schema
27+
* <p>必传参数,若不传入,则抛出 InvalidArgumentException 异常;</p>
28+
*/
29+
private String schema;
30+
/**
31+
* detail 对应的 id
32+
* <p>必传参数,若不传入,则抛出 InvalidArgumentException 异常;</p>
33+
*/
34+
private String detailId;
35+
/**
36+
* detail 的自定义属性集合
37+
* <p>非必传参数</p>
38+
*/
39+
private Map<String, Object> properties;
40+
/**
41+
* 若传入该参数,该 detail 则被视为该用户实体的明细
42+
* <p>非必传参数,跟 itemId 节点互斥,若同时传入,则会抛出 InvalidArgumentException 异常;</p>
43+
*/
44+
private Map<String, String> identities;
45+
/**
46+
* 只有传入 identities 节点信息,再设置该节点才会生效,否则设置该值无效;
47+
* <p>非必传参数,不传此值,会取 identities 节点集合里第一个节点的用户信息作为 distinct_id</p>
48+
*/
49+
private String distinctId;
50+
/**
51+
* 设置该参数,则该 detail 被视为 item 实体的明细
52+
* <p>非必传参数,跟 identities 节点互斥。若同时传入,则会抛出 InvalidArgumentException 异常;</p>
53+
*/
54+
private Pair<String, String> itemPair;
55+
56+
private Integer trackId;
57+
58+
59+
protected DetailSchema(String schema, String detailId, Map<String, Object> properties,
60+
Map<String, String> identities, String distinctId, Pair<String, String> itemPair, Integer trackId) {
61+
this.schema = schema;
62+
this.detailId = detailId;
63+
this.properties = properties;
64+
this.identities = identities;
65+
this.distinctId = distinctId;
66+
this.itemPair = itemPair;
67+
this.trackId = trackId;
68+
}
69+
70+
public static Builder init() {
71+
return new Builder();
72+
}
73+
74+
public static class Builder {
75+
private String schema;
76+
private String detailId;
77+
private Map<String, Object> properties = new HashMap<>();
78+
private Map<String, String> identities = new LinkedHashMap<>();
79+
private String distinctId;
80+
private Pair<String, String> itemPair;
81+
private Integer trackId;
82+
83+
84+
public DetailSchema start() throws InvalidArgumentException {
85+
SensorsAnalyticsUtil.assertSchema(schema);
86+
SensorsAnalyticsUtil.assertValue("detail_id", detailId);
87+
if (!identities.isEmpty() && null != itemPair) {
88+
throw new InvalidArgumentException("detail schema cannot both set identities and itemPair.");
89+
}
90+
this.trackId = SensorsAnalyticsUtil.getTrackId(properties,
91+
String.format("detail generate trackId error.[distinct_id=%s,detail_id=%s,schema=%s]",
92+
distinctId, detailId, schema));
93+
if (!identities.isEmpty()) {
94+
this.distinctId = SensorsAnalyticsUtil.checkUserInfo(null, identities, distinctId);
95+
}
96+
SensorsAnalyticsUtil.assertSchemaProperties(properties, null);
97+
return new DetailSchema(schema, detailId, properties, identities, distinctId, itemPair, trackId);
98+
}
99+
100+
public Builder setSchema(@NonNull String schema) {
101+
this.schema = schema;
102+
return this;
103+
}
104+
105+
public Builder setDetailId(@NonNull String detailId) {
106+
this.detailId = detailId;
107+
return this;
108+
}
109+
110+
public Builder setItemPair(@NonNull String key, @NonNull String value) {
111+
this.itemPair = Pair.of(key, value);
112+
return this;
113+
}
114+
115+
public Builder addProperties(@NonNull Map<String, Object> properties) {
116+
this.properties.putAll(properties);
117+
return this;
118+
}
119+
120+
public Builder addProperty(@NonNull String key, @NonNull String property) {
121+
addPropertyObject(key, property);
122+
return this;
123+
}
124+
125+
public Builder addProperty(@NonNull String key, boolean property) {
126+
addPropertyObject(key, property);
127+
return this;
128+
}
129+
130+
public Builder addProperty(@NonNull String key, @NonNull Number property) {
131+
addPropertyObject(key, property);
132+
return this;
133+
}
134+
135+
public Builder addProperty(@NonNull String key, @NonNull Date property) {
136+
addPropertyObject(key, property);
137+
return this;
138+
}
139+
140+
public Builder addProperty(@NonNull String key, @NonNull List<String> property) {
141+
addPropertyObject(key, property);
142+
return this;
143+
}
144+
145+
public Builder identityMap(@NonNull Map<String, String> identities) {
146+
this.identities.putAll(identities);
147+
return this;
148+
}
149+
150+
public Builder addIdentityProperty(@NonNull String key, @NonNull String value) {
151+
this.identities.put(key, value);
152+
return this;
153+
}
154+
155+
public Builder setDistinctId(@NonNull String distinctId) {
156+
this.distinctId = distinctId;
157+
return this;
158+
}
159+
160+
private void addPropertyObject(@NonNull String key, @NonNull Object property) {
161+
this.properties.put(key, property);
162+
}
163+
}
164+
165+
}

SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/schema/IdentitySchema.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import lombok.Getter;
44

55
import java.util.HashMap;
6+
import java.util.LinkedHashMap;
67
import java.util.Map;
78

89
/**
@@ -15,7 +16,7 @@
1516
@Getter
1617
public class IdentitySchema {
1718

18-
private Map<String, String> idMap = new HashMap<>();
19+
private Map<String, String> idMap;
1920

2021
protected IdentitySchema(Map<String, String> idMap) {
2122
this.idMap = idMap;
@@ -28,7 +29,7 @@ public static IdentitySchema.Builder init() {
2829

2930
public static class Builder {
3031

31-
private Map<String, String> idMap = new HashMap<>();
32+
private Map<String, String> idMap = new LinkedHashMap<>();
3233

3334
public Builder identityMap(Map<String, String> identityMap) {
3435
if (identityMap != null) {

0 commit comments

Comments
 (0)