();
@@ -157,6 +190,6 @@ public static void main(final String[] args) throws Exception {
sa.profileSetById(identity, hh);
sa.profileIncrementById(identity, "age", 1);
sa.profileAppendById(identity, "sport", "ball");
- sa.profileUnsetById(identity,"sport");
+ sa.profileUnsetById(identity, "sport");
}
}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/ISensorsAnalytics.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/ISensorsAnalytics.java
index e7629dd..4d450ab 100644
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/ISensorsAnalytics.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/ISensorsAnalytics.java
@@ -14,10 +14,8 @@
import com.sensorsdata.analytics.javasdk.bean.schema.UserEventSchema;
import com.sensorsdata.analytics.javasdk.bean.schema.UserSchema;
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
-
-import lombok.NonNull;
-
import java.util.Map;
+import lombok.NonNull;
/**
* 外部可调用的接口方法
@@ -44,22 +42,20 @@ public interface ISensorsAnalytics {
/**
* 设置每个事件都带有的一些公共属性
- *
- * 当track的Properties,superProperties和SDK自动生成的automaticProperties有相同的key时,遵循如下的优先级:
+ *
+ *
当track的Properties,superProperties和SDK自动生成的automaticProperties有相同的key时,遵循如下的优先级:
* track.properties 高于 superProperties 高于 automaticProperties
- *
- * 另外,当这个接口被多次调用时,是用新传入的数据去merge先前的数据
- *
- * 例如,在调用接口前,dict是 {"a":1, "b": "bbb"},传入的dict是 {"b": 123, "c": "asd"},则merge后
- * 的结果是 {"a":1, "b": 123, "c": "asd"}
+ *
+ *
另外,当这个接口被多次调用时,是用新传入的数据去merge先前的数据
+ *
+ *
例如,在调用接口前,dict是 {"a":1, "b": "bbb"},传入的dict是 {"b": 123, "c": "asd"},则merge后 的结果是 {"a":1,
+ * "b": 123, "c": "asd"}
*
* @param superPropertiesMap 一个或多个公共属性
*/
void registerSuperProperties(@NonNull Map superPropertiesMap);
- /**
- * 清除公共属性
- */
+ /** 清除公共属性 */
void clearSuperProperties();
/**
@@ -72,8 +68,7 @@ public interface ISensorsAnalytics {
/**
* 记录事件
*
- * @param eventRecord 事件消息对象
- * 通过 {@link EventRecord.Builder} 来构造;
+ * @param eventRecord 事件消息对象 通过 {@link EventRecord.Builder} 来构造;
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
void track(@NonNull EventRecord eventRecord) throws InvalidArgumentException;
@@ -82,65 +77,67 @@ public interface ISensorsAnalytics {
* 记录一个没有任何属性的事件
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param eventName 事件名称
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param eventName 事件名称
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
void track(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String eventName)
- throws InvalidArgumentException;
+ throws InvalidArgumentException;
/**
- * 记录一个拥有一个或多个属性的事件。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和
- * {@link java.util.List};
- * 若属性包含 $time 字段,则它会覆盖事件的默认时间属性,该字段只接受{@link java.util.Date}类型;
- * 若属性包含 $project 字段,则它会指定事件导入的项目;
+ * 记录一个拥有一个或多个属性的事件。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和 {@link
+ * java.util.List}; 若属性包含 $time 字段,则它会覆盖事件的默认时间属性,该字段只接受{@link java.util.Date}类型; 若属性包含 $project
+ * 字段,则它会指定事件导入的项目;
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param eventName 事件名称
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param eventName 事件名称
* @param properties 事件的属性
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void track(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String eventName,
- Map properties)
- throws InvalidArgumentException;
+ void track(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String eventName,
+ Map properties)
+ throws InvalidArgumentException;
/**
* 记录用户注册事件
- *
- * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明:
- * http://www.sensorsdata.cn/manual/track_signup.html
+ *
+ *
这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: http://www.sensorsdata.cn/manual/track_signup.html
* 并在必要时联系我们的技术支持人员。
*
- * @param loginId 登录 ID
+ * @param loginId 登录 ID
* @param anonymousId 匿名 ID
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void trackSignUp(@NonNull String loginId, @NonNull String anonymousId) throws InvalidArgumentException;
+ void trackSignUp(@NonNull String loginId, @NonNull String anonymousId)
+ throws InvalidArgumentException;
/**
* 记录用户注册事件
- *
- * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明:
- * http://www.sensorsdata.cn/manual/track_signup.html
+ *
+ *
这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: http://www.sensorsdata.cn/manual/track_signup.html
* 并在必要时联系我们的技术支持人员。
- *
- * 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- * 若属性包含 $time 字段,它会覆盖事件的默认时间属性,该字段只接受{@link java.util.Date}类型;
- * 若属性包含 $project 字段,则它会指定事件导入的项目;
*
- * @param loginId 登录 ID
+ *
属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
+ * 若属性包含 $time 字段,它会覆盖事件的默认时间属性,该字段只接受{@link java.util.Date}类型; 若属性包含 $project 字段,则它会指定事件导入的项目;
+ *
+ * @param loginId 登录 ID
* @param anonymousId 匿名 ID
- * @param properties 事件的属性
+ * @param properties 事件的属性
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void trackSignUp(@NonNull String loginId, @NonNull String anonymousId, Map properties)
- throws InvalidArgumentException;
+ void trackSignUp(
+ @NonNull String loginId, @NonNull String anonymousId, Map properties)
+ throws InvalidArgumentException;
/**
- * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 如果要设置的properties的key,之前在这个用户的profile中已经存在,则覆盖,否则,新创建
+ * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
如果要设置的properties的key,之前在这个用户的profile中已经存在,则覆盖,否则,新创建
*
* @param userRecord 用户属性实体
* @throws InvalidArgumentException 用户属性类型或者用户ID不合法则抛出该异常
@@ -148,36 +145,41 @@ void trackSignUp(@NonNull String loginId, @NonNull String anonymousId, Map
- * 如果要设置的properties的key,之前在这个用户的profile中已经存在,则覆盖,否则,新创建
+ * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ * 如果要设置的properties的key,之前在这个用户的profile中已经存在,则覆盖,否则,新创建
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
* @param properties 用户的属性
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileSet(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException;
+ void profileSet(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException;
/**
* 设置用户的属性。这个接口只能设置单个key对应的内容,同样,如果已经存在,则覆盖,否则,新创建
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param property 属性名称
- * @param value 属性的值
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param property 属性名称
+ * @param value 属性的值
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileSet(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException;
+ void profileSet(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException;
/**
- * 首次设置用户的属性。
- * 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 与profileSet接口不同的是:
- * 如果要设置的properties的key,在这个用户的profile中已经存在,则不处理,否则,新创建
+ * 首次设置用户的属性。 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
与profileSet接口不同的是: 如果要设置的properties的key,在这个用户的profile中已经存在,则不处理,否则,新创建
*
* @param userRecord 用户属性实体
* @throws InvalidArgumentException 用户属性类型或者用户ID不合法则抛出该异常
@@ -185,32 +187,35 @@ void profileSet(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull
void profileSetOnce(@NonNull UserRecord userRecord) throws InvalidArgumentException;
/**
- * 首次设置用户的属性。
- * 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 与profileSet接口不同的是:
- * 如果要设置的properties的key,在这个用户的profile中已经存在,则不处理,否则,新创建
+ * 首次设置用户的属性。 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
与profileSet接口不同的是: 如果要设置的properties的key,在这个用户的profile中已经存在,则不处理,否则,新创建
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
* @param properties 用户的属性
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileSetOnce(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException;
+ void profileSetOnce(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException;
/**
- * 首次设置用户的属性。这个接口只能设置单个key对应的内容。
- * 与profileSet接口不同的是,如果key的内容之前已经存在,则不处理,否则,重新创建
+ * 首次设置用户的属性。这个接口只能设置单个key对应的内容。 与profileSet接口不同的是,如果key的内容之前已经存在,则不处理,否则,重新创建
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param property 属性名称
- * @param value 属性的值
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param property 属性名称
+ * @param value 属性的值
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileSetOnce(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException;
+ void profileSetOnce(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException;
/**
* 为用户的数值类型的属性累加一个数值,若该属性不存在,则创建它并设置默认值为0
@@ -221,32 +226,35 @@ void profileSetOnce(@NonNull String distinctId, @NonNull boolean isLoginId, @Non
void profileIncrement(@NonNull UserRecord userRecord) throws InvalidArgumentException;
/**
- * 为用户的一个或多个数值类型的属性累加一个数值,若该属性不存在,则创建它并设置默认值为0。属性取值只接受
- * {@link Number}类型
+ * 为用户的一个或多个数值类型的属性累加一个数值,若该属性不存在,则创建它并设置默认值为0。属性取值只接受 {@link Number}类型
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
* @param properties 用户的属性
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileIncrement(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException;
+ void profileIncrement(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException;
/**
* 为用户的数值类型的属性累加一个数值,若该属性不存在,则创建它并设置默认值为0
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param property 属性名称
- * @param value 属性的值
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param property 属性名称
+ * @param value 属性的值
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileIncrement(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull long value) throws InvalidArgumentException;
+ void profileIncrement(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull long value)
+ throws InvalidArgumentException;
/**
- * 为用户的一个或多个数组类型的属性追加字符串,属性取值类型必须为 {@link java.util.List},且列表中元素的类型
- * 必须为 {@link String}
+ * 为用户的一个或多个数组类型的属性追加字符串,属性取值类型必须为 {@link java.util.List},且列表中元素的类型 必须为 {@link String}
*
* @param userRecord 用户属性实体
* @throws InvalidArgumentException 用户属性类型或者用户ID不合法则抛出该异常
@@ -254,28 +262,32 @@ void profileIncrement(@NonNull String distinctId, @NonNull boolean isLoginId, @N
void profileAppend(@NonNull UserRecord userRecord) throws InvalidArgumentException;
/**
- * 为用户的一个或多个数组类型的属性追加字符串,属性取值类型必须为 {@link java.util.List},且列表中元素的类型
- * 必须为 {@link String}
+ * 为用户的一个或多个数组类型的属性追加字符串,属性取值类型必须为 {@link java.util.List},且列表中元素的类型 必须为 {@link String}
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
* @param properties 用户的属性
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileAppend(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException;
+ void profileAppend(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException;
/**
* 为用户的数组类型的属性追加一个字符串
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param property 属性名称
- * @param value 属性的值
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param property 属性名称
+ * @param value 属性的值
* @throws InvalidArgumentException eventName 或 properties 不符合命名规范和类型规范时抛出该异常
*/
- void profileAppend(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull String value) throws InvalidArgumentException;
+ void profileAppend(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull String value)
+ throws InvalidArgumentException;
/**
* 删除用户已存在的一条或者多条属性
@@ -289,23 +301,25 @@ void profileAppend(@NonNull String distinctId, @NonNull boolean isLoginId, @NonN
* 删除用户某一个属性
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
- * @param property 属性名称
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param property 属性名称
* @throws InvalidArgumentException 用户属性类型或者用户ID不合法则抛出该异常
*/
- void profileUnset(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property)
- throws InvalidArgumentException;
+ void profileUnset(
+ @NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property)
+ throws InvalidArgumentException;
/**
* 删除用户属性
*
* @param distinctId 用户 ID
- * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
+ * @param isLoginId 用户 ID 是否是登录 ID,false 表示该 ID 是一个匿名 ID
* @param properties 用户属性名称列表,要删除的属性值请设置为 Boolean 类型的 true,如果要删除指定项目的用户属性,需正确传 $project 字段
* @throws InvalidArgumentException 用户属性类型或者用户ID不合法则抛出该异常
*/
- void profileUnset(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException;
+ void profileUnset(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException;
/**
* 删除用户所有属性
@@ -319,10 +333,11 @@ void profileUnset(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException;
+ void itemSet(
+ @NonNull String itemType,
+ @NonNull String itemId,
+ @NonNull Map properties)
+ throws InvalidArgumentException;
/**
* 删除维度表记录
@@ -354,13 +372,14 @@ void itemSet(@NonNull String itemType, @NonNull String itemId, @NonNull Map properties)
- throws InvalidArgumentException;
+ void itemDelete(
+ @NonNull String itemType, @NonNull String itemId, Map properties)
+ throws InvalidArgumentException;
/**
* 用户标识绑定
@@ -368,7 +387,8 @@ void itemDelete(@NonNull String itemType, @NonNull String itemId, Map properties, @NonNull SensorsAnalyticsIdentity... analyticsIdentity)
- throws InvalidArgumentException;
+ void bind(
+ Map properties, @NonNull SensorsAnalyticsIdentity... analyticsIdentity)
+ throws InvalidArgumentException;
/**
* 用户标识解绑
*
- * @param key 用户标识 key
- * @param value 用户标识值
+ * @param key 用户标识 key
+ * @param value 用户标识值
* @param properties 自定义属性
* @throws InvalidArgumentException 不合法参数异常
*/
void unbind(@NonNull String key, @NonNull String value, Map properties)
- throws InvalidArgumentException;
+ throws InvalidArgumentException;
/**
* 使用用户标识 3.0 系统埋点事件
*
* @param analyticsIdentity 用户标识 ID
- * @param eventName 事件名
- * @param properties 事件属性
+ * @param eventName 事件名
+ * @param properties 事件属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void trackById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String eventName,
- Map properties) throws InvalidArgumentException;
+ void trackById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String eventName,
+ Map properties)
+ throws InvalidArgumentException;
/**
- * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 如果要设置的 properties 的 key,之前在这个用户的 profile 中已经存在,则覆盖,否则,新创建
+ * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
如果要设置的 properties 的 key,之前在这个用户的 profile 中已经存在,则覆盖,否则,新创建
*
* @param analyticsIdentity 用户标识 ID
- * @param properties 用户属性
+ * @param properties 用户属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileSetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException;
+ void profileSetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException;
/**
- * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 如果要设置的properties的key,之前在这个用户的profile中已经存在,则覆盖,否则,新创建
+ * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
如果要设置的properties的key,之前在这个用户的profile中已经存在,则覆盖,否则,新创建
*
* @param analyticsIdentity 用户标识 ID
- * @param property 属性名
- * @param value 用于属性
+ * @param property 属性名
+ * @param value 用于属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileSetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException;
+ void profileSetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException;
/**
- * 首次设置用户的属性。
- * 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 与 profileSetById 接口不同的是:
- * 如果要设置的 properties 的 key,在这个用户的 profile 中已经存在,则不处理,否则,新创建
+ * 首次设置用户的属性。 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
与 profileSetById 接口不同的是: 如果要设置的 properties 的 key,在这个用户的 profile 中已经存在,则不处理,否则,新创建
*
* @param analyticsIdentity 用户标识 ID
- * @param properties 用户属性
+ * @param properties 用户属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileSetOnceById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException;
+ void profileSetOnceById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException;
/**
- * 首次设置用户的属性。
- * 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 与 profileSetById 接口不同的是:
- * 如果要设置的 properties 的 key,在这个用户的 profile 中已经存在,则不处理,否则,新创建
+ * 首次设置用户的属性。 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
与 profileSetById 接口不同的是: 如果要设置的 properties 的 key,在这个用户的 profile 中已经存在,则不处理,否则,新创建
*
* @param analyticsIdentity 用户标识 ID
- * @param property 属性名
- * @param value 属性值
+ * @param property 属性名
+ * @param value 属性值
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileSetOnceById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException;
+ void profileSetOnceById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException;
/**
* 为用户的一个或多个数值类型的属性累加一个数值,若该属性不存在,则创建它并设置默认值为 0。属性取值只接受{@link Number}类型
*
* @param analyticsIdentity 用户标识 ID
- * @param properties 用户属性
+ * @param properties 用户属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileIncrementById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException;
+ void profileIncrementById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException;
/**
* 为用户的一个或多个数值类型的属性累加一个数值,若该属性不存在,则创建它并设置默认值为 0。属性取值只接受{@link Number}类型
*
* @param analyticsIdentity 用户标识 ID
- * @param property 属性名
- * @param value 属性值
+ * @param property 属性名
+ * @param value 属性值
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileIncrementById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, String property, long value)
- throws InvalidArgumentException;
+ void profileIncrementById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, String property, long value)
+ throws InvalidArgumentException;
/**
* 为用户的一个或多个数组类型的属性追加字符串,属性取值类型必须为 {@link java.util.List},且列表中元素的类型必须为 {@link String}
*
* @param analyticsIdentity 用户标识 ID
- * @param properties 用户属性
+ * @param properties 用户属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileAppendById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException;
+ void profileAppendById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException;
/**
* 为用户的一个或多个数组类型的属性追加字符串,属性取值类型必须为 {@link java.util.List},且列表中元素的类型必须为 {@link String}
*
* @param analyticsIdentity 用户标识 ID
- * @param property 属性名
- * @param value 属性值
+ * @param property 属性名
+ * @param value 属性值
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileAppendById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property,
- @NonNull String value) throws InvalidArgumentException;
+ void profileAppendById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String property,
+ @NonNull String value)
+ throws InvalidArgumentException;
/**
* 删除用户某一个属性
*
* @param analyticsIdentity 用户标识 ID
- * @param properties 用户属性
+ * @param properties 用户属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException;
+ void profileUnsetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException;
/**
* 删除用户某一个属性
*
* @param analyticsIdentity 用户标识 ID
- * @param property 用户属性
+ * @param property 用户属性
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property)
- throws InvalidArgumentException;
+ void profileUnsetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property)
+ throws InvalidArgumentException;
/**
* 删除用户所有属性
@@ -545,16 +586,18 @@ void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonN
* @see #profileDeleteById(String, String)
*/
@Deprecated
- void profileDeleteById(@NonNull SensorsAnalyticsIdentity analyticsIdentity) throws InvalidArgumentException;
+ void profileDeleteById(@NonNull SensorsAnalyticsIdentity analyticsIdentity)
+ throws InvalidArgumentException;
/**
* 删除指定用户的所有属性
*
- * @param key 用户标识 key
+ * @param key 用户标识 key
* @param value 用户标识值
* @throws InvalidArgumentException 不合法参数异常
*/
- void profileDeleteById(@NonNull String key, @NonNull String value) throws InvalidArgumentException;
+ void profileDeleteById(@NonNull String key, @NonNull String value)
+ throws InvalidArgumentException;
/**
* 使用 IDM3.0 触发埋点事件
@@ -565,9 +608,10 @@ void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonN
void trackById(@NonNull IDMEventRecord idmEventRecord) throws InvalidArgumentException;
/**
- * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
- *
- * 如果要设置的 properties 的 key,之前在这个用户的 profile 中已经存在,则覆盖,否则,新创建
+ * 设置用户的属性。属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
+ *
+ *
如果要设置的 properties 的 key,之前在这个用户的 profile 中已经存在,则覆盖,否则,新创建
*
* @param idmUserRecord 用户属性集合对象 {@link com.sensorsdata.analytics.javasdk.bean.IDMUserRecord}
* @throws InvalidArgumentException 不合法参数异常
@@ -575,8 +619,8 @@ void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonN
void profileSetById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException;
/**
- * 首次设置用户的属性。
- * 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link java.util.List};
+ * 首次设置用户的属性。 属性取值可接受类型为{@link Number}, {@link String}, {@link java.util.Date}和{@link
+ * java.util.List};
*
* @param idmUserRecord 用户属性集合对象 {@link com.sensorsdata.analytics.javasdk.bean.IDMUserRecord}
* @throws InvalidArgumentException 不合法参数异常
@@ -607,7 +651,6 @@ void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonN
*/
void profileUnsetById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException;
-
void track(@NonNull UserEventSchema userEventSchema) throws InvalidArgumentException;
void track(@NonNull ItemEventSchema itemEventSchema) throws InvalidArgumentException;
@@ -650,13 +693,9 @@ void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonN
*/
void detailDelete(@NonNull DetailSchema detailSchema) throws InvalidArgumentException;
- /**
- * 立即发送缓存中的所有日志
- */
+ /** 立即发送缓存中的所有日志 */
void flush();
- /**
- * 停止SensorsDataAPI所有线程,API停止前会清空所有本地数据
- */
+ /** 停止SensorsDataAPI所有线程,API停止前会清空所有本地数据 */
void shutdown();
}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsAnalytics.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsAnalytics.java
index 1cbc929..be98fc4 100755
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsAnalytics.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsAnalytics.java
@@ -39,19 +39,15 @@
import com.sensorsdata.analytics.javasdk.consumer.Consumer;
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
-
-import lombok.NonNull;
-import lombok.extern.slf4j.Slf4j;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
-/**
- * Sensors Analytics SDK
- */
+/** Sensors Analytics SDK */
@Slf4j
public class SensorsAnalytics implements ISensorsAnalytics {
@@ -65,8 +61,8 @@ public class SensorsAnalytics implements ISensorsAnalytics {
void setSuperProperties(Map superProperties) {
for (Map.Entry entry : superProperties.entrySet()) {
- if (SensorsAnalyticsUtil.KEY_PATTERN.matcher(entry.getKey()).matches() &&
- !"$track_id".equals(entry.getKey())) {
+ if (SensorsAnalyticsUtil.KEY_PATTERN.matcher(entry.getKey()).matches()
+ && !"$track_id".equals(entry.getKey())) {
this.superProperties.put(entry.getKey(), entry.getValue());
}
}
@@ -111,7 +107,9 @@ public void clearSuperProperties() {
@Override
public void track(@NonNull EventRecord eventRecord) throws InvalidArgumentException {
- eventRecord.getPropertyMap().putAll(putAllSuperPro(eventRecord.getPropertyMap(), superProperties));
+ eventRecord
+ .getPropertyMap()
+ .putAll(putAllSuperPro(eventRecord.getPropertyMap(), superProperties));
worker.doAddData(new SensorsData(eventRecord, TRACK_ACTION_TYPE));
}
@@ -148,7 +146,8 @@ public void profileUnset(@NonNull UserRecord userRecord) throws InvalidArgumentE
continue;
}
}
- throw new InvalidArgumentException("The property value of " + property.getKey() + " should be true.");
+ throw new InvalidArgumentException(
+ "The property value of " + property.getKey() + " should be true.");
}
}
dealProfile(userRecord, PROFILE_UNSET_ACTION_TYPE);
@@ -161,91 +160,129 @@ public void profileDelete(@NonNull UserRecord userRecord) throws InvalidArgument
@Override
public void itemSet(@NonNull ItemRecord itemRecord) throws InvalidArgumentException {
- addItem(itemRecord.getItemType(), itemRecord.getItemId(), ITEM_SET_ACTION_TYPE,
- itemRecord.getPropertyMap());
+ addItem(
+ itemRecord.getItemType(),
+ itemRecord.getItemId(),
+ ITEM_SET_ACTION_TYPE,
+ itemRecord.getPropertyMap());
}
@Override
public void itemDelete(@NonNull ItemRecord itemRecord) throws InvalidArgumentException {
- addItem(itemRecord.getItemType(), itemRecord.getItemId(), ITEM_DELETE_ACTION_TYPE,
- itemRecord.getPropertyMap());
+ addItem(
+ itemRecord.getItemType(),
+ itemRecord.getItemId(),
+ ITEM_DELETE_ACTION_TYPE,
+ itemRecord.getPropertyMap());
}
@Override
- public void track(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String eventName)
- throws InvalidArgumentException {
+ public void track(
+ @NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String eventName)
+ throws InvalidArgumentException {
addEvent(distinctId, isLoginId, null, TRACK_ACTION_TYPE, eventName, null);
}
@Override
- public void track(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String eventName,
- Map properties)
- throws InvalidArgumentException {
+ public void track(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String eventName,
+ Map properties)
+ throws InvalidArgumentException {
addEvent(distinctId, isLoginId, null, TRACK_ACTION_TYPE, eventName, properties);
}
@Override
- public void trackSignUp(@NonNull String loginId, @NonNull String anonymousId) throws InvalidArgumentException {
+ public void trackSignUp(@NonNull String loginId, @NonNull String anonymousId)
+ throws InvalidArgumentException {
addEvent(loginId, false, anonymousId, TRACK_SIGN_UP_ACTION_TYPE, SIGN_UP_SYSTEM_ATTR, null);
}
@Override
- public void trackSignUp(@NonNull String loginId, @NonNull String anonymousId, Map properties)
- throws InvalidArgumentException {
- addEvent(loginId, false, anonymousId, TRACK_SIGN_UP_ACTION_TYPE, SIGN_UP_SYSTEM_ATTR, properties);
+ public void trackSignUp(
+ @NonNull String loginId, @NonNull String anonymousId, Map properties)
+ throws InvalidArgumentException {
+ addEvent(
+ loginId,
+ false,
+ anonymousId,
+ TRACK_SIGN_UP_ACTION_TYPE,
+ SIGN_UP_SYSTEM_ATTR,
+ properties);
}
@Override
- public void profileSet(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException {
+ public void profileSet(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException {
dealProfile(distinctId, isLoginId, properties, PROFILE_SET_ACTION_TYPE);
}
@Override
- public void profileSet(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException {
+ public void profileSet(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, value);
dealProfile(distinctId, isLoginId, properties, PROFILE_SET_ACTION_TYPE);
}
@Override
- public void profileSetOnce(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException {
+ public void profileSetOnce(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException {
dealProfile(distinctId, isLoginId, properties, PROFILE_SET_ONCE_ACTION_TYPE);
}
@Override
- public void profileSetOnce(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException {
+ public void profileSetOnce(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, value);
dealProfile(distinctId, isLoginId, properties, PROFILE_SET_ONCE_ACTION_TYPE);
}
@Override
- public void profileIncrement(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException {
+ public void profileIncrement(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException {
dealProfile(distinctId, isLoginId, properties, PROFILE_INCREMENT_ACTION_TYPE);
}
@Override
- public void profileIncrement(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull long value) throws InvalidArgumentException {
+ public void profileIncrement(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull long value)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, value);
dealProfile(distinctId, isLoginId, properties, PROFILE_INCREMENT_ACTION_TYPE);
}
@Override
- public void profileAppend(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException {
+ public void profileAppend(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException {
dealProfile(distinctId, isLoginId, properties, PROFILE_APPEND_ACTION_TYPE);
}
@Override
- public void profileAppend(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property,
- @NonNull String value) throws InvalidArgumentException {
+ public void profileAppend(
+ @NonNull String distinctId,
+ @NonNull boolean isLoginId,
+ @NonNull String property,
+ @NonNull String value)
+ throws InvalidArgumentException {
List values = new ArrayList<>();
values.add(value);
Map properties = new HashMap<>();
@@ -254,16 +291,18 @@ public void profileAppend(@NonNull String distinctId, @NonNull boolean isLoginId
}
@Override
- public void profileUnset(@NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property)
- throws InvalidArgumentException {
+ public void profileUnset(
+ @NonNull String distinctId, @NonNull boolean isLoginId, @NonNull String property)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, true);
dealProfile(distinctId, isLoginId, properties, PROFILE_UNSET_ACTION_TYPE);
}
@Override
- public void profileUnset(@NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
- throws InvalidArgumentException {
+ public void profileUnset(
+ @NonNull String distinctId, @NonNull boolean isLoginId, Map properties)
+ throws InvalidArgumentException {
if (properties == null) {
return;
}
@@ -275,134 +314,164 @@ public void profileUnset(@NonNull String distinctId, @NonNull boolean isLoginId,
continue;
}
}
- throw new InvalidArgumentException("The property value of " + property.getKey() + " should be true.");
+ throw new InvalidArgumentException(
+ "The property value of " + property.getKey() + " should be true.");
}
}
dealProfile(distinctId, isLoginId, properties, PROFILE_UNSET_ACTION_TYPE);
}
@Override
- public void profileDelete(@NonNull String distinctId, @NonNull boolean isLoginId) throws InvalidArgumentException {
+ public void profileDelete(@NonNull String distinctId, @NonNull boolean isLoginId)
+ throws InvalidArgumentException {
dealProfile(distinctId, isLoginId, null, PROFILE_DELETE_ACTION_TYPE);
}
@Override
- public void itemSet(@NonNull String itemType, @NonNull String itemId, Map properties)
- throws InvalidArgumentException {
+ public void itemSet(
+ @NonNull String itemType, @NonNull String itemId, Map properties)
+ throws InvalidArgumentException {
addItem(itemType, itemId, ITEM_SET_ACTION_TYPE, properties);
}
@Override
- public void itemDelete(@NonNull String itemType, @NonNull String itemId, Map properties)
- throws InvalidArgumentException {
+ public void itemDelete(
+ @NonNull String itemType, @NonNull String itemId, Map properties)
+ throws InvalidArgumentException {
addItem(itemType, itemId, ITEM_DELETE_ACTION_TYPE, properties);
}
@Override
- public void bind(@NonNull SensorsAnalyticsIdentity... identities) throws InvalidArgumentException {
- bind(null,identities);
+ public void bind(@NonNull SensorsAnalyticsIdentity... identities)
+ throws InvalidArgumentException {
+ bind(null, identities);
}
@Override
- public void unbind(@NonNull SensorsAnalyticsIdentity analyticsIdentity) throws InvalidArgumentException {
+ public void unbind(@NonNull SensorsAnalyticsIdentity analyticsIdentity)
+ throws InvalidArgumentException {
if (analyticsIdentity.getIdentityMap().size() != 1) {
- throw new InvalidArgumentException("unbind user operation cannot input multiple or none identifiers.");
+ throw new InvalidArgumentException(
+ "unbind user operation cannot input multiple or none identifiers.");
}
- addEventIdentity(analyticsIdentity.getIdentityMap(), null, UNBIND_ID_ACTION_TYPE, UNBIND_ID);
+ addEventIdentity(
+ analyticsIdentity.getIdentityMap(), null, UNBIND_ID_ACTION_TYPE, UNBIND_ID);
}
@Override
public void unbind(@NonNull String key, @NonNull String value) throws InvalidArgumentException {
- SensorsAnalyticsIdentity identity = SensorsAnalyticsIdentity.builder().addIdentityProperty(key, value).build();
+ SensorsAnalyticsIdentity identity =
+ SensorsAnalyticsIdentity.builder().addIdentityProperty(key, value).build();
addEventIdentity(identity.getIdentityMap(), null, UNBIND_ID_ACTION_TYPE, UNBIND_ID);
}
@Override
- public void bind(Map properties, @NonNull SensorsAnalyticsIdentity... analyticsIdentity)
- throws InvalidArgumentException {
+ public void bind(
+ Map properties, @NonNull SensorsAnalyticsIdentity... analyticsIdentity)
+ throws InvalidArgumentException {
Map identityMap = new HashMap<>();
for (SensorsAnalyticsIdentity identity : analyticsIdentity) {
identityMap.putAll(identity.getIdentityMap());
}
if (identityMap.size() < 2) {
- throw new InvalidArgumentException("The identities is invalid,you should have at least two identities.");
+ throw new InvalidArgumentException(
+ "The identities is invalid,you should have at least two identities.");
}
addEventIdentity(identityMap, properties, BIND_ID_ACTION_TYPE, BIND_ID);
}
@Override
public void unbind(@NonNull String key, @NonNull String value, Map properties)
- throws InvalidArgumentException {
- SensorsAnalyticsIdentity identity = SensorsAnalyticsIdentity.builder().addIdentityProperty(key, value).build();
+ throws InvalidArgumentException {
+ SensorsAnalyticsIdentity identity =
+ SensorsAnalyticsIdentity.builder().addIdentityProperty(key, value).build();
addEventIdentity(identity.getIdentityMap(), properties, UNBIND_ID_ACTION_TYPE, UNBIND_ID);
}
@Override
- public void trackById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String eventName,
- Map properties) throws InvalidArgumentException {
+ public void trackById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String eventName,
+ Map properties)
+ throws InvalidArgumentException {
if (properties == null) {
properties = new HashMap<>();
}
properties.putAll(superProperties);
- IDMEventRecord eventRecord = IDMEventRecord.starter()
- .identityMap(analyticsIdentity.getIdentityMap())
- .setEventName(eventName)
- .addProperties(properties)
- .build();
+ IDMEventRecord eventRecord =
+ IDMEventRecord.starter()
+ .identityMap(analyticsIdentity.getIdentityMap())
+ .setEventName(eventName)
+ .addProperties(properties)
+ .build();
worker.doAddData(new SensorsData(eventRecord));
}
@Override
- public void profileSetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException {
- addProfileIdentity(analyticsIdentity, PROFILE_SET_ACTION_TYPE, properties);
+ public void profileSetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException {
+ addProfileIdentity(analyticsIdentity, PROFILE_SET_ACTION_TYPE, properties);
}
@Override
- public void profileSetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException {
+ public void profileSetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, value);
addProfileIdentity(analyticsIdentity, PROFILE_SET_ACTION_TYPE, properties);
}
@Override
- public void profileSetOnceById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException {
+ public void profileSetOnceById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException {
addProfileIdentity(analyticsIdentity, PROFILE_SET_ONCE_ACTION_TYPE, properties);
}
@Override
- public void profileSetOnceById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property,
- @NonNull Object value) throws InvalidArgumentException {
+ public void profileSetOnceById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String property,
+ @NonNull Object value)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, value);
- addProfileIdentity(analyticsIdentity, PROFILE_SET_ONCE_ACTION_TYPE, properties);
+ addProfileIdentity(analyticsIdentity, PROFILE_SET_ONCE_ACTION_TYPE, properties);
}
@Override
- public void profileIncrementById(@NonNull SensorsAnalyticsIdentity analyticsIdentity,
- Map properties) throws InvalidArgumentException {
+ public void profileIncrementById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException {
addProfileIdentity(analyticsIdentity, PROFILE_INCREMENT_ACTION_TYPE, properties);
}
@Override
- public void profileIncrementById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, String property, long value)
- throws InvalidArgumentException {
+ public void profileIncrementById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, String property, long value)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, value);
- addProfileIdentity(analyticsIdentity, PROFILE_INCREMENT_ACTION_TYPE, properties);
+ addProfileIdentity(analyticsIdentity, PROFILE_INCREMENT_ACTION_TYPE, properties);
}
@Override
- public void profileAppendById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException {
+ public void profileAppendById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException {
addProfileIdentity(analyticsIdentity, PROFILE_APPEND_ACTION_TYPE, properties);
}
@Override
- public void profileAppendById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property,
- @NonNull String value) throws InvalidArgumentException {
+ public void profileAppendById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity,
+ @NonNull String property,
+ @NonNull String value)
+ throws InvalidArgumentException {
List values = new ArrayList<>();
values.add(value);
Map properties = new HashMap<>();
@@ -411,8 +480,9 @@ public void profileAppendById(@NonNull SensorsAnalyticsIdentity analyticsIdentit
}
@Override
- public void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
- throws InvalidArgumentException {
+ public void profileUnsetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, Map properties)
+ throws InvalidArgumentException {
if (properties == null) {
return;
}
@@ -424,68 +494,85 @@ public void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity
continue;
}
}
- throw new InvalidArgumentException("The property value of [" + property.getKey() + "] should be true.");
+ throw new InvalidArgumentException(
+ "The property value of [" + property.getKey() + "] should be true.");
}
}
addProfileIdentity(analyticsIdentity, PROFILE_UNSET_ACTION_TYPE, properties);
}
@Override
- public void profileUnsetById(@NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property)
- throws InvalidArgumentException {
+ public void profileUnsetById(
+ @NonNull SensorsAnalyticsIdentity analyticsIdentity, @NonNull String property)
+ throws InvalidArgumentException {
Map properties = new HashMap<>();
properties.put(property, true);
addProfileIdentity(analyticsIdentity, PROFILE_UNSET_ACTION_TYPE, properties);
}
@Override
- public void profileDeleteById(@NonNull SensorsAnalyticsIdentity analyticsIdentity) throws InvalidArgumentException {
+ public void profileDeleteById(@NonNull SensorsAnalyticsIdentity analyticsIdentity)
+ throws InvalidArgumentException {
if (analyticsIdentity.getIdentityMap().size() != 1) {
- throw new InvalidArgumentException("delete user operation cannot input multiple or none identifiers.");
+ throw new InvalidArgumentException(
+ "delete user operation cannot input multiple or none identifiers.");
}
addProfileIdentity(analyticsIdentity, PROFILE_DELETE_ACTION_TYPE, null);
}
@Override
- public void profileDeleteById(@NonNull String key, @NonNull String value) throws InvalidArgumentException {
+ public void profileDeleteById(@NonNull String key, @NonNull String value)
+ throws InvalidArgumentException {
SensorsAnalyticsIdentity analyticsIdentity =
- SensorsAnalyticsIdentity.builder().addIdentityProperty(key, value).build();
+ SensorsAnalyticsIdentity.builder().addIdentityProperty(key, value).build();
addProfileIdentity(analyticsIdentity, PROFILE_DELETE_ACTION_TYPE, null);
}
@Override
public void trackById(@NonNull IDMEventRecord idmEventRecord) throws InvalidArgumentException {
- idmEventRecord.getPropertyMap().putAll(putAllSuperPro(idmEventRecord.getPropertyMap(), superProperties));
+ idmEventRecord
+ .getPropertyMap()
+ .putAll(putAllSuperPro(idmEventRecord.getPropertyMap(), superProperties));
worker.doAddData(new SensorsData(idmEventRecord));
}
@Override
- public void profileSetById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertProperties(PROFILE_SET_ACTION_TYPE, idmUserRecord.getPropertyMap());
+ public void profileSetById(@NonNull IDMUserRecord idmUserRecord)
+ throws InvalidArgumentException {
+ SensorsAnalyticsUtil.assertProperties(
+ PROFILE_SET_ACTION_TYPE, idmUserRecord.getPropertyMap());
worker.doAddData(new SensorsData(idmUserRecord, PROFILE_SET_ACTION_TYPE));
}
@Override
- public void profileSetOnceById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertProperties(PROFILE_SET_ONCE_ACTION_TYPE, idmUserRecord.getPropertyMap());
+ public void profileSetOnceById(@NonNull IDMUserRecord idmUserRecord)
+ throws InvalidArgumentException {
+ SensorsAnalyticsUtil.assertProperties(
+ PROFILE_SET_ONCE_ACTION_TYPE, idmUserRecord.getPropertyMap());
worker.doAddData(new SensorsData(idmUserRecord, PROFILE_SET_ONCE_ACTION_TYPE));
}
@Override
- public void profileIncrementById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertProperties(PROFILE_INCREMENT_ACTION_TYPE, idmUserRecord.getPropertyMap());
+ public void profileIncrementById(@NonNull IDMUserRecord idmUserRecord)
+ throws InvalidArgumentException {
+ SensorsAnalyticsUtil.assertProperties(
+ PROFILE_INCREMENT_ACTION_TYPE, idmUserRecord.getPropertyMap());
worker.doAddData(new SensorsData(idmUserRecord, PROFILE_INCREMENT_ACTION_TYPE));
}
@Override
- public void profileAppendById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertProperties(PROFILE_APPEND_ACTION_TYPE, idmUserRecord.getPropertyMap());
+ public void profileAppendById(@NonNull IDMUserRecord idmUserRecord)
+ throws InvalidArgumentException {
+ SensorsAnalyticsUtil.assertProperties(
+ PROFILE_APPEND_ACTION_TYPE, idmUserRecord.getPropertyMap());
worker.doAddData(new SensorsData(idmUserRecord, PROFILE_APPEND_ACTION_TYPE));
}
@Override
- public void profileUnsetById(@NonNull IDMUserRecord idmUserRecord) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertProperties(PROFILE_UNSET_ACTION_TYPE, idmUserRecord.getPropertyMap());
+ public void profileUnsetById(@NonNull IDMUserRecord idmUserRecord)
+ throws InvalidArgumentException {
+ SensorsAnalyticsUtil.assertProperties(
+ PROFILE_UNSET_ACTION_TYPE, idmUserRecord.getPropertyMap());
if (idmUserRecord.getPropertyMap() == null) {
return;
}
@@ -497,83 +584,99 @@ public void profileUnsetById(@NonNull IDMUserRecord idmUserRecord) throws Invali
continue;
}
}
- throw new InvalidArgumentException("The property value of " + property.getKey() + " should be true.");
+ throw new InvalidArgumentException(
+ "The property value of " + property.getKey() + " should be true.");
}
}
worker.doAddData(new SensorsData(idmUserRecord, PROFILE_UNSET_ACTION_TYPE));
}
-
@Override
public void track(@NonNull UserEventSchema userEventSchema) throws InvalidArgumentException {
- userEventSchema.getPropertyMap().putAll(putAllSuperPro(userEventSchema.getPropertyMap(), superProperties));
+ userEventSchema
+ .getPropertyMap()
+ .putAll(putAllSuperPro(userEventSchema.getPropertyMap(), superProperties));
worker.doSchemaData(new SensorsSchemaData(userEventSchema, TRACK_ACTION_TYPE));
}
@Override
public void track(@NonNull ItemEventSchema itemEventSchema) throws InvalidArgumentException {
- itemEventSchema.getProperties().putAll(putAllSuperPro(itemEventSchema.getProperties(), superProperties));
+ itemEventSchema
+ .getProperties()
+ .putAll(putAllSuperPro(itemEventSchema.getProperties(), superProperties));
worker.doSchemaData(new SensorsSchemaData(itemEventSchema, TRACK_ACTION_TYPE));
}
@Override
public void bind(@NonNull IdentitySchema identitySchema) throws InvalidArgumentException {
if (identitySchema.getIdMap().size() < 2) {
- throw new InvalidArgumentException("The identities is invalid,you should have at least two identities.");
+ throw new InvalidArgumentException(
+ "The identities is invalid,you should have at least two identities.");
}
- UserEventSchema userEventSchema = UserEventSchema.init()
- .setEventName(BIND_ID)
- .identityMap(identitySchema.getIdMap())
- .addProperties(putAllSuperPro(identitySchema.getProperties(), superProperties))
- .start();
+ UserEventSchema userEventSchema =
+ UserEventSchema.init()
+ .setEventName(BIND_ID)
+ .identityMap(identitySchema.getIdMap())
+ .addProperties(
+ putAllSuperPro(identitySchema.getProperties(), superProperties))
+ .start();
worker.doSchemaData(new SensorsSchemaData(userEventSchema, BIND_ID_ACTION_TYPE));
}
@Override
public void unbind(@NonNull IdentitySchema identitySchema) throws InvalidArgumentException {
if (identitySchema.getIdMap().size() != 1) {
- throw new InvalidArgumentException("unbind user operation cannot input multiple or none identifiers.");
+ throw new InvalidArgumentException(
+ "unbind user operation cannot input multiple or none identifiers.");
}
- UserEventSchema userEventSchema = UserEventSchema.init()
- .setEventName(UNBIND_ID)
- .identityMap(identitySchema.getIdMap())
- .addProperties(putAllSuperPro(identitySchema.getProperties(), superProperties))
- .start();
+ UserEventSchema userEventSchema =
+ UserEventSchema.init()
+ .setEventName(UNBIND_ID)
+ .identityMap(identitySchema.getIdMap())
+ .addProperties(
+ putAllSuperPro(identitySchema.getProperties(), superProperties))
+ .start();
worker.doSchemaData(new SensorsSchemaData(userEventSchema, UNBIND_ID_ACTION_TYPE));
}
@Override
public void profileSet(@NonNull UserSchema userSchema) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertSchemaProperties(userSchema.getPropertyMap(), PROFILE_SET_ACTION_TYPE);
+ SensorsAnalyticsUtil.assertSchemaProperties(
+ userSchema.getPropertyMap(), PROFILE_SET_ACTION_TYPE);
worker.doSchemaData(new SensorsSchemaData(userSchema, PROFILE_SET_ACTION_TYPE));
}
@Override
public void profileSetOnce(@NonNull UserSchema userSchema) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertSchemaProperties(userSchema.getPropertyMap(), PROFILE_SET_ONCE_ACTION_TYPE);
+ SensorsAnalyticsUtil.assertSchemaProperties(
+ userSchema.getPropertyMap(), PROFILE_SET_ONCE_ACTION_TYPE);
worker.doSchemaData(new SensorsSchemaData(userSchema, PROFILE_SET_ONCE_ACTION_TYPE));
}
@Override
public void profileIncrement(@NonNull UserSchema userSchema) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertSchemaProperties(userSchema.getPropertyMap(), PROFILE_INCREMENT_ACTION_TYPE);
+ SensorsAnalyticsUtil.assertSchemaProperties(
+ userSchema.getPropertyMap(), PROFILE_INCREMENT_ACTION_TYPE);
worker.doSchemaData(new SensorsSchemaData(userSchema, PROFILE_INCREMENT_ACTION_TYPE));
}
@Override
public void profileAppend(@NonNull UserSchema userSchema) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertSchemaProperties(userSchema.getPropertyMap(), PROFILE_APPEND_ACTION_TYPE);
+ SensorsAnalyticsUtil.assertSchemaProperties(
+ userSchema.getPropertyMap(), PROFILE_APPEND_ACTION_TYPE);
worker.doSchemaData(new SensorsSchemaData(userSchema, PROFILE_APPEND_ACTION_TYPE));
}
@Override
public void profileUnset(@NonNull UserSchema userSchema) throws InvalidArgumentException {
- SensorsAnalyticsUtil.assertSchemaProperties(userSchema.getPropertyMap(), PROFILE_UNSET_ACTION_TYPE);
+ SensorsAnalyticsUtil.assertSchemaProperties(
+ userSchema.getPropertyMap(), PROFILE_UNSET_ACTION_TYPE);
worker.doSchemaData(new SensorsSchemaData(userSchema, PROFILE_UNSET_ACTION_TYPE));
}
@Override
- public void profileDelete(@NonNull String key, @NonNull String value) throws InvalidArgumentException {
+ public void profileDelete(@NonNull String key, @NonNull String value)
+ throws InvalidArgumentException {
UserSchema userSchema = UserSchema.init().addIdentityProperty(key, value).start();
worker.doSchemaData(new SensorsSchemaData(userSchema, PROFILE_DELETE_ACTION_TYPE));
}
@@ -614,90 +717,110 @@ public void shutdown() {
worker.shutdown();
}
- private void dealProfile(String distinctId, Boolean isLoginId, Map properties, String actionType)
- throws InvalidArgumentException {
+ private void dealProfile(
+ String distinctId, Boolean isLoginId, Map properties, String actionType)
+ throws InvalidArgumentException {
SensorsAnalyticsUtil.assertProperties(actionType, properties);
- UserRecord userRecord = UserRecord.builder()
- .setDistinctId(distinctId)
- .isLoginId(isLoginId)
- .addProperties(properties)
- .build();
+ UserRecord userRecord =
+ UserRecord.builder()
+ .setDistinctId(distinctId)
+ .isLoginId(isLoginId)
+ .addProperties(properties)
+ .build();
worker.doAddData(new SensorsData(userRecord, actionType));
}
- private void dealProfile(UserRecord userRecord, String actionType) throws InvalidArgumentException {
+ private void dealProfile(UserRecord userRecord, String actionType)
+ throws InvalidArgumentException {
SensorsAnalyticsUtil.assertProperties(actionType, userRecord.getPropertyMap());
worker.doAddData(new SensorsData(userRecord, actionType));
}
- private void addItem(String itemType, String itemId, String actionType, Map properties)
- throws InvalidArgumentException {
+ private void addItem(
+ String itemType, String itemId, String actionType, Map properties)
+ throws InvalidArgumentException {
SensorsAnalyticsUtil.assertProperties(actionType, properties);
- ItemRecord itemRecord = ItemRecord.builder()
- .setItemId(itemId)
- .setItemType(itemType)
- .addProperties(properties)
- .build();
+ ItemRecord itemRecord =
+ ItemRecord.builder()
+ .setItemId(itemId)
+ .setItemType(itemType)
+ .addProperties(properties)
+ .build();
worker.doAddData(new SensorsData(itemRecord, actionType));
}
- private void addEvent(String distinctId, boolean isLoginId, String originDistinctId, String actionType,
- String eventName, Map properties) throws InvalidArgumentException {
+ private void addEvent(
+ String distinctId,
+ boolean isLoginId,
+ String originDistinctId,
+ String actionType,
+ String eventName,
+ Map properties)
+ throws InvalidArgumentException {
SensorsAnalyticsUtil.assertProperties(actionType, properties);
if (actionType.equals(TRACK_SIGN_UP_ACTION_TYPE)) {
SensorsAnalyticsUtil.assertValue(ORIGINAL_DISTINCT_ID, originDistinctId);
}
- EventRecord eventRecord = EventRecord.builder()
- .setEventName(eventName)
- .setDistinctId(distinctId)
- .isLoginId(isLoginId)
- .addProperties(putAllSuperPro(properties, superProperties))
- .build();
+ EventRecord eventRecord =
+ EventRecord.builder()
+ .setEventName(eventName)
+ .setDistinctId(distinctId)
+ .isLoginId(isLoginId)
+ .addProperties(putAllSuperPro(properties, superProperties))
+ .build();
SensorsData sensorsData = new SensorsData(eventRecord, actionType);
sensorsData.setOriginalId(originDistinctId);
worker.doAddData(sensorsData);
}
- private void addProfileIdentity(SensorsAnalyticsIdentity analyticsIdentity, String actionType,
- Map properties) throws InvalidArgumentException {
+ private void addProfileIdentity(
+ SensorsAnalyticsIdentity analyticsIdentity,
+ String actionType,
+ Map properties)
+ throws InvalidArgumentException {
if (analyticsIdentity.getIdentityMap().isEmpty()) {
throw new InvalidArgumentException("The identity is empty.");
}
assertIdentityMap(actionType, analyticsIdentity.getIdentityMap());
SensorsAnalyticsUtil.assertProperties(actionType, properties);
- IDMUserRecord idmUserRecord = IDMUserRecord.starter()
- .identityMap(analyticsIdentity.getIdentityMap())
- .addProperties(properties)
- .build();
+ IDMUserRecord idmUserRecord =
+ IDMUserRecord.starter()
+ .identityMap(analyticsIdentity.getIdentityMap())
+ .addProperties(properties)
+ .build();
worker.doAddData(new SensorsData(idmUserRecord, actionType));
}
- private void addEventIdentity(Map identityMap, Map properties, String actionType,
- String eventName)
- throws InvalidArgumentException {
+ private void addEventIdentity(
+ Map identityMap,
+ Map properties,
+ String actionType,
+ String eventName)
+ throws InvalidArgumentException {
if (identityMap.isEmpty()) {
throw new InvalidArgumentException("The identity is empty.");
}
assertIdentityMap(actionType, identityMap);
SensorsAnalyticsUtil.assertProperties(actionType, properties);
- IDMEventRecord idmEventRecord = IDMEventRecord.starter()
- .setEventName(eventName)
- .identityMap(identityMap)
- .addProperties(putAllSuperPro(properties, superProperties))
- .build();
+ IDMEventRecord idmEventRecord =
+ IDMEventRecord.starter()
+ .setEventName(eventName)
+ .identityMap(identityMap)
+ .addProperties(putAllSuperPro(properties, superProperties))
+ .build();
worker.doAddData(new SensorsData(idmEventRecord, actionType));
}
-
-
- private void assertIdentityMap(String actionType, Map identityMap) throws InvalidArgumentException {
+ private void assertIdentityMap(String actionType, Map identityMap)
+ throws InvalidArgumentException {
for (Map.Entry entry : identityMap.entrySet()) {
SensorsAnalyticsUtil.assertKey(actionType, entry.getKey());
SensorsAnalyticsUtil.assertValue(actionType, entry.getValue());
}
}
- private Map putAllSuperPro(Map pro, Map superPro) {
+ private Map putAllSuperPro(
+ Map pro, Map superPro) {
if (pro == null) {
pro = new HashMap<>();
}
@@ -708,5 +831,4 @@ private Map putAllSuperPro(Map pro, Map data = SensorsData.generateData(sensorsData);
- data.put("lib", generateLibInfo());
- if (timeFree && (TRACK_ACTION_TYPE.equals(sensorsData.getType())
- || TRACK_SIGN_UP_ACTION_TYPE.equals(sensorsData.getType()))
- || BIND_ID_ACTION_TYPE.equals(sensorsData.getType())
- || UNBIND_ID_ACTION_TYPE.equals(sensorsData.getType())) {
- data.put("time_free", true);
+ public SensorsAnalyticsWorker(Consumer consumer) {
+ this.consumer = consumer;
+ Runtime.getRuntime()
+ .addShutdownHook(
+ new Thread(
+ new Runnable() {
+ @Override
+ public void run() {
+ log.info("Triggered flush when the program is closed.");
+ flush();
+ }
+ }));
}
- this.consumer.send(data);
- }
- void flush() {
- this.consumer.flush();
- }
+ void doAddData(@NonNull SensorsData sensorsData) {
+ Map data = SensorsData.generateData(sensorsData);
+ data.put("lib", generateLibInfo());
+ if (timeFree
+ && (TRACK_ACTION_TYPE.equals(sensorsData.getType())
+ || TRACK_SIGN_UP_ACTION_TYPE.equals(sensorsData.getType()))
+ || BIND_ID_ACTION_TYPE.equals(sensorsData.getType())
+ || UNBIND_ID_ACTION_TYPE.equals(sensorsData.getType())) {
+ data.put("time_free", true);
+ }
+ this.consumer.send(data);
+ }
- void shutdown() {
- this.consumer.close();
- }
+ void flush() {
+ this.consumer.flush();
+ }
+ void shutdown() {
+ this.consumer.close();
+ }
- public void doSchemaData(@NonNull SensorsSchemaData schemaData) {
- Map sensorsData = schemaData.generateData();
- sensorsData.put("lib", generateLibInfo());
- if (timeFree && (TRACK_ACTION_TYPE.equals(schemaData.getType())
- || TRACK_SIGN_UP_ACTION_TYPE.equals(schemaData.getType())
- || BIND_ID_ACTION_TYPE.equals(schemaData.getType())
- || UNBIND_ID_ACTION_TYPE.equals(schemaData.getType()))) {
- sensorsData.put("time_free", true);
+ public void doSchemaData(@NonNull SensorsSchemaData schemaData) {
+ Map sensorsData = schemaData.generateData();
+ sensorsData.put("lib", generateLibInfo());
+ if (timeFree
+ && (TRACK_ACTION_TYPE.equals(schemaData.getType())
+ || TRACK_SIGN_UP_ACTION_TYPE.equals(schemaData.getType())
+ || BIND_ID_ACTION_TYPE.equals(schemaData.getType())
+ || UNBIND_ID_ACTION_TYPE.equals(schemaData.getType()))) {
+ sensorsData.put("time_free", true);
+ }
+ this.consumer.send(sensorsData);
}
- this.consumer.send(sensorsData);
- }
- public void setEnableTimeFree(boolean enableTimeFree) {
- this.timeFree = enableTimeFree;
- }
+ public void setEnableTimeFree(boolean enableTimeFree) {
+ this.timeFree = enableTimeFree;
+ }
- public void setEnableCollectMethodStack(boolean enableCollectMethodStack) {
- this.enableCollectMethodStack = enableCollectMethodStack;
- }
+ public void setEnableCollectMethodStack(boolean enableCollectMethodStack) {
+ this.enableCollectMethodStack = enableCollectMethodStack;
+ }
- public Map generateLibInfo() {
- Map libProperties = new HashMap<>();
- libProperties.put(LIB_SYSTEM_ATTR, LIB);
- libProperties.put(LIB_VERSION_SYSTEM_ATTR, SDK_VERSION);
- libProperties.put(LIB_METHOD_SYSTEM_ATTR, "code");
- if (enableCollectMethodStack) {
- StackTraceElement[] trace = (new Exception()).getStackTrace();
- if (trace.length > 3) {
- StackTraceElement traceElement = trace[3];
- libProperties.put(LIB_DETAIL_SYSTEM_ATTR,
- String.format("%s##%s##%s##%s", traceElement.getClassName(), traceElement.getMethodName(),
- traceElement.getFileName(), traceElement.getLineNumber()));
- }
- } else {
- libProperties.put(LIB_DETAIL_SYSTEM_ATTR, DEFAULT_LIB_DETAIL);
+ public Map generateLibInfo() {
+ Map libProperties = new HashMap<>();
+ libProperties.put(LIB_SYSTEM_ATTR, LIB);
+ libProperties.put(LIB_VERSION_SYSTEM_ATTR, SDK_VERSION);
+ libProperties.put(LIB_METHOD_SYSTEM_ATTR, "code");
+ if (enableCollectMethodStack) {
+ StackTraceElement[] trace = (new Exception()).getStackTrace();
+ if (trace.length > 3) {
+ StackTraceElement traceElement = trace[3];
+ libProperties.put(
+ LIB_DETAIL_SYSTEM_ATTR,
+ String.format(
+ "%s##%s##%s##%s",
+ traceElement.getClassName(),
+ traceElement.getMethodName(),
+ traceElement.getFileName(),
+ traceElement.getLineNumber()));
+ }
+ } else {
+ libProperties.put(LIB_DETAIL_SYSTEM_ATTR, DEFAULT_LIB_DETAIL);
+ }
+ return libProperties;
}
- return libProperties;
- }
}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsConst.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsConst.java
index ecec8bc..9f9b473 100644
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsConst.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsConst.java
@@ -9,36 +9,24 @@
*/
public class SensorsConst {
- private SensorsConst() {
- }
+ private SensorsConst() {}
- /**
- * 当前JDK版本号,注意要和pom文件里面的version保持一致
- */
+ /** 当前JDK版本号,注意要和pom文件里面的version保持一致 */
public static final String SDK_VERSION = "3.6.7";
- /**
- * 当前语言类型
- */
+ /** 当前语言类型 */
public static final String LIB = "Java";
- /**
- * 当前数据协议版本
- */
+ /** 当前数据协议版本 */
public static final String PROTOCOL_VERSION = "2.0";
- /**
- * user events 所属 schema
- */
+ /** user events 所属 schema */
public static final String USER_EVENT_SCHEMA = "events";
- /**
- * user 所属 schema
- */
+ /** user 所属 schema */
public static final String USER_SCHEMA = "users";
public static final String USER_ID_PREFIX = "SENSORS_ID:";
- /**
- * 事件上报类型
- */
+ /** 事件上报类型 */
public static final String TRACK_ACTION_TYPE = "track";
+
public static final String TRACK_SIGN_UP_ACTION_TYPE = "track_signup";
public static final String PROFILE_SET_ACTION_TYPE = "profile_set";
public static final String PROFILE_SET_ONCE_ACTION_TYPE = "profile_set_once";
@@ -51,28 +39,22 @@ private SensorsConst() {
public static final String DETAIL_SET_ACTION_TYPE = "detail_set";
public static final String DETAIL_DELETE_ACTION_TYPE = "detail_delete";
- /**
- * ID-Mapping
- */
+ /** ID-Mapping */
public static final String BIND_ID_ACTION_TYPE = "track_id_bind";
+
public static final String UNBIND_ID_ACTION_TYPE = "track_id_unbind";
public static final String ITEM_TYPE = "Item Type";
public static final String ITEM_ID = "Item Id";
- /**
- * 绑定事件名称
- */
+ /** 绑定事件名称 */
public static final String BIND_ID = "$BindID";
- /**
- * 解绑事件名称
- */
+ /** 解绑事件名称 */
public static final String UNBIND_ID = "$UnbindID";
public static final String PROPERTIES = "properties";
- /**
- * 系统预置属性
- */
+ /** 系统预置属性 */
public static final String TRACK_ID = "$track_id";
+
public static final String PROJECT_SYSTEM_ATTR = "$project";
public static final String TIME_SYSTEM_ATTR = "$time";
public static final String TOKEN_SYSTEM_ATTR = "$token";
@@ -85,5 +67,5 @@ private SensorsConst() {
public static final String SIGN_UP_SYSTEM_ATTR = "$SignUp";
public static final String TIME_FREE_ATTR = "$time_free";
- public static final String DEFAULT_LIB_DETAIL="JavaSDK##generateLibInfo";
+ public static final String DEFAULT_LIB_DETAIL = "JavaSDK##generateLibInfo";
}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsData.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsData.java
index 1ed406c..3c521a3 100644
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsData.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsData.java
@@ -10,13 +10,11 @@
import com.sensorsdata.analytics.javasdk.bean.IDMUserRecord;
import com.sensorsdata.analytics.javasdk.bean.ItemRecord;
import com.sensorsdata.analytics.javasdk.bean.UserRecord;
-
-import lombok.Getter;
-import lombok.Setter;
-
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
/**
* 神策数据格式(IDM2.0 和 IDM3.0 格式的数据)
@@ -28,185 +26,230 @@
@Getter
@Setter
class SensorsData {
- /**
- * 数据唯一标识
- */
- private Integer trackId;
- /**
- * 数据用户唯一标识
- */
- private String distinctId;
- /**
- * 数据用户匿名标识
- */
- private String originalId;
- /**
- * IDM3.0 用户维度标识
- */
- private Map identities;
- /**
- * 事件类型
- */
- private String type;
- /**
- * 事件名称
- */
- private String event;
- /**
- * 数据采集来源
- */
- private Map lib;
- /**
- * 记录生成时间
- */
- private Date time;
- /**
- * 数据属性集合
- */
- private Map properties;
- /**
- * 数据接收项目
- */
- private String project;
- /**
- * 数据 token
- */
- private String token;
- /**
- * 纬度类型
- */
- private String itemType;
- /**
- * 纬度 ID
- */
- private String itemId;
-
- private boolean timeFree = false;
-
- protected SensorsData() {
- }
-
- protected SensorsData(EventRecord eventRecord, String actionType) {
- this(eventRecord.getDistinctId(), eventRecord.getOriginalId(), null, actionType, eventRecord.getEventName(),
- eventRecord.getPropertyMap(), null, null, eventRecord.getTrackId());
- }
-
- protected SensorsData(ItemRecord itemRecord, String actionType) {
- this(null, null, null, actionType, null, itemRecord.getPropertyMap(),
- itemRecord.getItemType(), itemRecord.getItemId(), itemRecord.getTrackId());
- }
-
- protected SensorsData(UserRecord userRecord, String actionType) {
- this(userRecord.getDistinctId(), actionType, null, userRecord.getPropertyMap(), userRecord.getTrackId());
- }
-
- protected SensorsData(T userRecord, String actionType) {
- this(userRecord.getDistinctId(), actionType, userRecord.getIdentityMap(), userRecord.getPropertyMap(),
- userRecord.getTrackId());
- }
-
- protected SensorsData(T eventRecord) {
- this(eventRecord.getDistinctId(), eventRecord.getIdentityMap(), eventRecord.getEventName(),
- eventRecord.getPropertyMap(), eventRecord.getTrackId());
- }
-
- protected SensorsData(T eventRecord, String actionType) {
- this(eventRecord.getDistinctId(), null, eventRecord.getIdentityMap(), actionType,
- eventRecord.getEventName(), eventRecord.getPropertyMap(), null, null, eventRecord.getTrackId());
- }
-
- protected SensorsData(String distinctId, String type, Map identities,
- Map properties, Integer trackId) {
- this(distinctId, null, identities, type, null, properties, null, null, trackId);
- }
-
- /**
- * 构建 track 数据实体
- *
- * @param distinctId 用户ID
- * @param event 事件名
- * @param properties 事件属性集合
- */
- protected SensorsData(String distinctId, Map identities, String event,
- Map properties, Integer trackId) {
- this(distinctId, null, identities, TRACK_ACTION_TYPE, event, properties, null, null, trackId);
- }
-
- /**
- * 专用于 item 相关 schema 构建
- */
- protected SensorsData(Integer trackId, String distinctId, Map identities, String itemId, String type,
- String event, Map properties) {
- this(distinctId, null, identities, type, event, properties, null, itemId, trackId);
- }
-
- protected SensorsData(String distinctId, String originalId, Map identities, String type, String event,
- Map properties, String itemType, String itemId, Integer trackId) {
- this.trackId = trackId;
- this.distinctId = distinctId;
- this.originalId = originalId;
- this.identities = identities;
- this.type = type;
- this.event = event;
- this.time = properties.containsKey(SensorsConst.TIME_SYSTEM_ATTR) ?
- (Date) properties.remove(SensorsConst.TIME_SYSTEM_ATTR) : new Date();
- this.properties = properties;
- this.itemType = itemType;
- this.itemId = itemId;
- this.project = properties.get(SensorsConst.PROJECT_SYSTEM_ATTR) == null ?
- null : String.valueOf(properties.remove(SensorsConst.PROJECT_SYSTEM_ATTR));
- this.token = properties.get(SensorsConst.TOKEN_SYSTEM_ATTR) == null ?
- null : String.valueOf(properties.remove(SensorsConst.TOKEN_SYSTEM_ATTR));
- this.timeFree = properties.containsKey(SensorsConst.TIME_FREE_ATTR)
- && Boolean.parseBoolean(properties.remove(SensorsConst.TIME_FREE_ATTR).toString());
- }
-
-
- protected static Map generateData(SensorsData sensorsData) {
- Map eventMap = new HashMap<>();
- if (sensorsData.getTrackId() != null) {
- eventMap.put("_track_id", sensorsData.getTrackId());
- }
- if (sensorsData.getDistinctId() != null) {
- eventMap.put("distinct_id", sensorsData.getDistinctId());
+ /** 数据唯一标识 */
+ private Integer trackId;
+ /** 数据用户唯一标识 */
+ private String distinctId;
+ /** 数据用户匿名标识 */
+ private String originalId;
+ /** IDM3.0 用户维度标识 */
+ private Map identities;
+ /** 事件类型 */
+ private String type;
+ /** 事件名称 */
+ private String event;
+ /** 数据采集来源 */
+ private Map lib;
+ /** 记录生成时间 */
+ private Date time;
+ /** 数据属性集合 */
+ private Map properties;
+ /** 数据接收项目 */
+ private String project;
+ /** 数据 token */
+ private String token;
+ /** 纬度类型 */
+ private String itemType;
+ /** 纬度 ID */
+ private String itemId;
+
+ private boolean timeFree = false;
+
+ protected SensorsData() {}
+
+ protected SensorsData(EventRecord eventRecord, String actionType) {
+ this(
+ eventRecord.getDistinctId(),
+ eventRecord.getOriginalId(),
+ null,
+ actionType,
+ eventRecord.getEventName(),
+ eventRecord.getPropertyMap(),
+ null,
+ null,
+ eventRecord.getTrackId());
}
- if (sensorsData.getOriginalId() != null) {
- eventMap.put("original_id", sensorsData.getOriginalId());
- }
- if (sensorsData.getIdentities() != null) {
- eventMap.put("identities", sensorsData.getIdentities());
+
+ protected SensorsData(ItemRecord itemRecord, String actionType) {
+ this(
+ null,
+ null,
+ null,
+ actionType,
+ null,
+ itemRecord.getPropertyMap(),
+ itemRecord.getItemType(),
+ itemRecord.getItemId(),
+ itemRecord.getTrackId());
}
- if (sensorsData.getType() != null) {
- eventMap.put("type", sensorsData.getType());
+
+ protected SensorsData(UserRecord userRecord, String actionType) {
+ this(
+ userRecord.getDistinctId(),
+ actionType,
+ null,
+ userRecord.getPropertyMap(),
+ userRecord.getTrackId());
}
- if (sensorsData.getEvent() != null) {
- eventMap.put("event", sensorsData.getEvent());
+
+ protected SensorsData(T userRecord, String actionType) {
+ this(
+ userRecord.getDistinctId(),
+ actionType,
+ userRecord.getIdentityMap(),
+ userRecord.getPropertyMap(),
+ userRecord.getTrackId());
}
- // fix 【SDK-4709】time 类型保持为时间戳类型
- eventMap.put("time", sensorsData.getTime().getTime());
- if (sensorsData.getProject() != null) {
- eventMap.put("project", sensorsData.getProject());
+
+ protected SensorsData(T eventRecord) {
+ this(
+ eventRecord.getDistinctId(),
+ eventRecord.getIdentityMap(),
+ eventRecord.getEventName(),
+ eventRecord.getPropertyMap(),
+ eventRecord.getTrackId());
}
- if (sensorsData.getToken() != null) {
- eventMap.put("token", sensorsData.getToken());
+
+ protected SensorsData(T eventRecord, String actionType) {
+ this(
+ eventRecord.getDistinctId(),
+ null,
+ eventRecord.getIdentityMap(),
+ actionType,
+ eventRecord.getEventName(),
+ eventRecord.getPropertyMap(),
+ null,
+ null,
+ eventRecord.getTrackId());
}
- if (sensorsData.getItemId() != null) {
- eventMap.put("item_id", sensorsData.getItemId());
+
+ protected SensorsData(
+ String distinctId,
+ String type,
+ Map identities,
+ Map properties,
+ Integer trackId) {
+ this(distinctId, null, identities, type, null, properties, null, null, trackId);
}
- if (sensorsData.getItemType() != null) {
- eventMap.put("item_type", sensorsData.getItemType());
+
+ /**
+ * 构建 track 数据实体
+ *
+ * @param distinctId 用户ID
+ * @param event 事件名
+ * @param properties 事件属性集合
+ */
+ protected SensorsData(
+ String distinctId,
+ Map identities,
+ String event,
+ Map properties,
+ Integer trackId) {
+ this(
+ distinctId,
+ null,
+ identities,
+ TRACK_ACTION_TYPE,
+ event,
+ properties,
+ null,
+ null,
+ trackId);
}
- if (sensorsData.getProperties() != null) {
- eventMap.put("properties", sensorsData.getProperties());
+
+ /** 专用于 item 相关 schema 构建 */
+ protected SensorsData(
+ Integer trackId,
+ String distinctId,
+ Map identities,
+ String itemId,
+ String type,
+ String event,
+ Map properties) {
+ this(distinctId, null, identities, type, event, properties, null, itemId, trackId);
}
- if (sensorsData.isTimeFree()
- && (TRACK_ACTION_TYPE.equals(sensorsData.getType())
- || TRACK_SIGN_UP_ACTION_TYPE.equals(sensorsData.getType())
- || BIND_ID_ACTION_TYPE.equals(sensorsData.getType())
- || UNBIND_ID_ACTION_TYPE.equals(sensorsData.getType()))) {
- eventMap.put("time_free", true);
+
+ protected SensorsData(
+ String distinctId,
+ String originalId,
+ Map identities,
+ String type,
+ String event,
+ Map properties,
+ String itemType,
+ String itemId,
+ Integer trackId) {
+ this.trackId = trackId;
+ this.distinctId = distinctId;
+ this.originalId = originalId;
+ this.identities = identities;
+ this.type = type;
+ this.event = event;
+ this.time =
+ properties.containsKey(SensorsConst.TIME_SYSTEM_ATTR)
+ ? (Date) properties.remove(SensorsConst.TIME_SYSTEM_ATTR)
+ : new Date();
+ this.properties = properties;
+ this.itemType = itemType;
+ this.itemId = itemId;
+ this.project =
+ properties.get(SensorsConst.PROJECT_SYSTEM_ATTR) == null
+ ? null
+ : String.valueOf(properties.remove(SensorsConst.PROJECT_SYSTEM_ATTR));
+ this.token =
+ properties.get(SensorsConst.TOKEN_SYSTEM_ATTR) == null
+ ? null
+ : String.valueOf(properties.remove(SensorsConst.TOKEN_SYSTEM_ATTR));
+ this.timeFree =
+ properties.containsKey(SensorsConst.TIME_FREE_ATTR)
+ && Boolean.parseBoolean(
+ properties.remove(SensorsConst.TIME_FREE_ATTR).toString());
}
- return eventMap;
- }
+ protected static Map generateData(SensorsData sensorsData) {
+ Map eventMap = new HashMap<>();
+ if (sensorsData.getTrackId() != null) {
+ eventMap.put("_track_id", sensorsData.getTrackId());
+ }
+ if (sensorsData.getDistinctId() != null) {
+ eventMap.put("distinct_id", sensorsData.getDistinctId());
+ }
+ if (sensorsData.getOriginalId() != null) {
+ eventMap.put("original_id", sensorsData.getOriginalId());
+ }
+ if (sensorsData.getIdentities() != null) {
+ eventMap.put("identities", sensorsData.getIdentities());
+ }
+ if (sensorsData.getType() != null) {
+ eventMap.put("type", sensorsData.getType());
+ }
+ if (sensorsData.getEvent() != null) {
+ eventMap.put("event", sensorsData.getEvent());
+ }
+ // fix 【SDK-4709】time 类型保持为时间戳类型
+ eventMap.put("time", sensorsData.getTime().getTime());
+ if (sensorsData.getProject() != null) {
+ eventMap.put("project", sensorsData.getProject());
+ }
+ if (sensorsData.getToken() != null) {
+ eventMap.put("token", sensorsData.getToken());
+ }
+ if (sensorsData.getItemId() != null) {
+ eventMap.put("item_id", sensorsData.getItemId());
+ }
+ if (sensorsData.getItemType() != null) {
+ eventMap.put("item_type", sensorsData.getItemType());
+ }
+ if (sensorsData.getProperties() != null) {
+ eventMap.put("properties", sensorsData.getProperties());
+ }
+ if (sensorsData.isTimeFree()
+ && (TRACK_ACTION_TYPE.equals(sensorsData.getType())
+ || TRACK_SIGN_UP_ACTION_TYPE.equals(sensorsData.getType())
+ || BIND_ID_ACTION_TYPE.equals(sensorsData.getType())
+ || UNBIND_ID_ACTION_TYPE.equals(sensorsData.getType()))) {
+ eventMap.put("time_free", true);
+ }
+ return eventMap;
+ }
}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsSchemaData.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsSchemaData.java
index 11a9407..75b2e0c 100644
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsSchemaData.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/SensorsSchemaData.java
@@ -12,11 +12,9 @@
import com.sensorsdata.analytics.javasdk.bean.schema.UserSchema;
import com.sensorsdata.analytics.javasdk.common.Pair;
import com.sensorsdata.analytics.javasdk.common.SchemaTypeEnum;
-
-import lombok.extern.slf4j.Slf4j;
-
import java.util.HashMap;
import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
/**
* 神策多实体数据
@@ -28,151 +26,178 @@
@Slf4j
class SensorsSchemaData extends SensorsData {
- private String version = SensorsConst.PROTOCOL_VERSION;
-
- private String schema;
-
- private Long userId;
-
- private String detailId;
-
- private Pair itemEventPair;
-
- private SchemaTypeEnum schemaTypeEnum;
-
- /**
- * 构建 userEventSchema 数据,actionType:track/bind/unbind
- */
- protected SensorsSchemaData(UserEventSchema userEventSchema, String actionType) {
- super(userEventSchema.getDistinctId(), null, userEventSchema.getIdentityMap(), actionType,
- userEventSchema.getEventName(), userEventSchema.getPropertyMap(), null, null, userEventSchema.getTrackId());
- this.schema = SensorsConst.USER_EVENT_SCHEMA;
- this.userId = userEventSchema.getUserId();
- this.schemaTypeEnum = SchemaTypeEnum.USER_EVENT;
- }
-
- protected SensorsSchemaData(ItemSchema itemSchema, String actionType) {
- super(itemSchema.getTrackId(), null, null, itemSchema.getItemId(), actionType, null, itemSchema.getProperties());
- this.schema = itemSchema.getSchema();
- this.schemaTypeEnum = SchemaTypeEnum.ITEM;
- }
-
- protected SensorsSchemaData(ItemEventSchema itemEventSchema, String actionType) {
- super(itemEventSchema.getTrackId(), null, null, null, actionType,
- itemEventSchema.getEventName(),
- itemEventSchema.getProperties());
- this.schema = itemEventSchema.getSchema();
- this.itemEventPair = itemEventSchema.getItemPair();
- this.schemaTypeEnum = SchemaTypeEnum.ITEM_EVENT;
- }
-
- protected SensorsSchemaData(UserSchema userSchema, String actionType) {
- super(userSchema.getDistinctId(), actionType, userSchema.getIdentityMap(), userSchema.getPropertyMap(),
- userSchema.getTrackId());
- this.schema = SensorsConst.USER_SCHEMA;
- this.userId = userSchema.getUserId();
- this.schemaTypeEnum = SchemaTypeEnum.USER;
- }
-
- protected SensorsSchemaData(DetailSchema detailSchema, String actionType) {
- super(detailSchema.getTrackId(), detailSchema.getDistinctId(), detailSchema.getIdentities(),
- null, actionType, null,
- detailSchema.getProperties());
- this.schema = detailSchema.getSchema();
- this.itemEventPair = detailSchema.getItemPair();
- this.detailId = detailSchema.getDetailId();
- this.schemaTypeEnum = SchemaTypeEnum.DETAIL;
- }
-
- public Map generateData() {
- Map data = new HashMap<>();
- data.put("_track_id", getTrackId());
- data.put("version", version);
- data.put("type", getType());
- data.put("schema", schema);
- data.put("lib", getLib());
- data.put("time", getTime().getTime());
- if (getProject() != null && !"".equals(getProject())) {
- data.put("project", getProject());
+ private String version = SensorsConst.PROTOCOL_VERSION;
+
+ private String schema;
+
+ private Long userId;
+
+ private String detailId;
+
+ private Pair itemEventPair;
+
+ private SchemaTypeEnum schemaTypeEnum;
+
+ /** 构建 userEventSchema 数据,actionType:track/bind/unbind */
+ protected SensorsSchemaData(UserEventSchema userEventSchema, String actionType) {
+ super(
+ userEventSchema.getDistinctId(),
+ null,
+ userEventSchema.getIdentityMap(),
+ actionType,
+ userEventSchema.getEventName(),
+ userEventSchema.getPropertyMap(),
+ null,
+ null,
+ userEventSchema.getTrackId());
+ this.schema = SensorsConst.USER_EVENT_SCHEMA;
+ this.userId = userEventSchema.getUserId();
+ this.schemaTypeEnum = SchemaTypeEnum.USER_EVENT;
+ }
+
+ protected SensorsSchemaData(ItemSchema itemSchema, String actionType) {
+ super(
+ itemSchema.getTrackId(),
+ null,
+ null,
+ itemSchema.getItemId(),
+ actionType,
+ null,
+ itemSchema.getProperties());
+ this.schema = itemSchema.getSchema();
+ this.schemaTypeEnum = SchemaTypeEnum.ITEM;
+ }
+
+ protected SensorsSchemaData(ItemEventSchema itemEventSchema, String actionType) {
+ super(
+ itemEventSchema.getTrackId(),
+ null,
+ null,
+ null,
+ actionType,
+ itemEventSchema.getEventName(),
+ itemEventSchema.getProperties());
+ this.schema = itemEventSchema.getSchema();
+ this.itemEventPair = itemEventSchema.getItemPair();
+ this.schemaTypeEnum = SchemaTypeEnum.ITEM_EVENT;
+ }
+
+ protected SensorsSchemaData(UserSchema userSchema, String actionType) {
+ super(
+ userSchema.getDistinctId(),
+ actionType,
+ userSchema.getIdentityMap(),
+ userSchema.getPropertyMap(),
+ userSchema.getTrackId());
+ this.schema = SensorsConst.USER_SCHEMA;
+ this.userId = userSchema.getUserId();
+ this.schemaTypeEnum = SchemaTypeEnum.USER;
}
- if (getToken() != null && !"".equals(getToken())) {
- data.put("token", getToken());
+
+ protected SensorsSchemaData(DetailSchema detailSchema, String actionType) {
+ super(
+ detailSchema.getTrackId(),
+ detailSchema.getDistinctId(),
+ detailSchema.getIdentities(),
+ null,
+ actionType,
+ null,
+ detailSchema.getProperties());
+ this.schema = detailSchema.getSchema();
+ this.itemEventPair = detailSchema.getItemPair();
+ this.detailId = detailSchema.getDetailId();
+ this.schemaTypeEnum = SchemaTypeEnum.DETAIL;
}
- switch (schemaTypeEnum) {
- case ITEM:
- data.put("id", getItemId());
- break;
- case ITEM_EVENT:
- getProperties().put(itemEventPair.getKey(), itemEventPair.getValue());
- addTimeFree(data);
- data.put("event", getEvent());
- break;
- case USER:
- checkUserIdAndAddUser(data, "id");
- break;
- case USER_EVENT:
- addTimeFree(data);
- data.put("event", getEvent());
- checkUserIdAndAddUser(getProperties(), "user_id");
- break;
- case USER_ITEM:
- data.put("id", getItemId());
- checkUserIdAndAddUser(getProperties(), "user_id");
- break;
- case DETAIL:
- data.put("id", detailId);
- if (itemEventPair != null) {
- getProperties().put(itemEventPair.getKey(), itemEventPair.getValue());
+
+ public Map generateData() {
+ Map data = new HashMap<>();
+ data.put("_track_id", getTrackId());
+ data.put("version", version);
+ data.put("type", getType());
+ data.put("schema", schema);
+ data.put("lib", getLib());
+ data.put("time", getTime().getTime());
+ if (getProject() != null && !"".equals(getProject())) {
+ data.put("project", getProject());
}
- if (!getIdentities().isEmpty()) {
- checkUserIdAndAddUser(getProperties(), "user_id");
+ if (getToken() != null && !"".equals(getToken())) {
+ data.put("token", getToken());
}
- default:
- break;
+ switch (schemaTypeEnum) {
+ case ITEM:
+ data.put("id", getItemId());
+ break;
+ case ITEM_EVENT:
+ getProperties().put(itemEventPair.getKey(), itemEventPair.getValue());
+ addTimeFree(data);
+ data.put("event", getEvent());
+ break;
+ case USER:
+ checkUserIdAndAddUser(data, "id");
+ break;
+ case USER_EVENT:
+ addTimeFree(data);
+ data.put("event", getEvent());
+ checkUserIdAndAddUser(getProperties(), "user_id");
+ break;
+ case USER_ITEM:
+ data.put("id", getItemId());
+ checkUserIdAndAddUser(getProperties(), "user_id");
+ break;
+ case DETAIL:
+ data.put("id", detailId);
+ if (itemEventPair != null) {
+ getProperties().put(itemEventPair.getKey(), itemEventPair.getValue());
+ }
+ if (!getIdentities().isEmpty()) {
+ checkUserIdAndAddUser(getProperties(), "user_id");
+ }
+ default:
+ break;
+ }
+ data.put("properties", getProperties());
+ return data;
+ }
+
+ public boolean isEventSchemaData() {
+ return SchemaTypeEnum.ITEM_EVENT.equals(schemaTypeEnum)
+ || SchemaTypeEnum.USER_EVENT.equals(schemaTypeEnum);
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public String getSchema() {
+ return schema;
+ }
+
+ public Long getUserId() {
+ return userId;
}
- data.put("properties", getProperties());
- return data;
- }
-
- public boolean isEventSchemaData() {
- return SchemaTypeEnum.ITEM_EVENT.equals(schemaTypeEnum)
- || SchemaTypeEnum.USER_EVENT.equals(schemaTypeEnum);
- }
-
-
- public String getVersion() {
- return version;
- }
-
- public String getSchema() {
- return schema;
- }
-
- public Long getUserId() {
- return userId;
- }
-
- public SchemaTypeEnum getSchemaTypeEnum() {
- return schemaTypeEnum;
- }
-
- private void addTimeFree(Map data) {
- if (isTimeFree() && (TRACK_ACTION_TYPE.equals(getType())
- || TRACK_SIGN_UP_ACTION_TYPE.equals(getType())
- || BIND_ID_ACTION_TYPE.equals(getType())
- || UNBIND_ID_ACTION_TYPE.equals(getType()))) {
- data.put("time_free", true);
+
+ public SchemaTypeEnum getSchemaTypeEnum() {
+ return schemaTypeEnum;
}
- }
- private void checkUserIdAndAddUser(Map data, String key) {
- if (null != getUserId()) {
- data.put(key, getUserId());
- } else if (null != getIdentities() && !getIdentities().isEmpty()) {
- data.put("identities", getIdentities());
+ private void addTimeFree(Map data) {
+ if (isTimeFree()
+ && (TRACK_ACTION_TYPE.equals(getType())
+ || TRACK_SIGN_UP_ACTION_TYPE.equals(getType())
+ || BIND_ID_ACTION_TYPE.equals(getType())
+ || UNBIND_ID_ACTION_TYPE.equals(getType()))) {
+ data.put("time_free", true);
+ }
}
- if (null != getDistinctId()) {
- data.put("distinct_id", getDistinctId());
+
+ private void checkUserIdAndAddUser(Map data, String key) {
+ if (null != getUserId()) {
+ data.put(key, getUserId());
+ } else if (null != getIdentities() && !getIdentities().isEmpty()) {
+ data.put("identities", getIdentities());
+ }
+ if (null != getDistinctId()) {
+ data.put("distinct_id", getDistinctId());
+ }
}
- }
}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/EventRecord.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/EventRecord.java
index f3361bb..4ba33e3 100644
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/EventRecord.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/EventRecord.java
@@ -3,16 +3,13 @@
import com.sensorsdata.analytics.javasdk.SensorsConst;
import com.sensorsdata.analytics.javasdk.exceptions.InvalidArgumentException;
import com.sensorsdata.analytics.javasdk.util.SensorsAnalyticsUtil;
-
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-/**
- * 事件表信息实体对象
- */
+/** 事件表信息实体对象 */
public class EventRecord implements Serializable {
private static final long serialVersionUID = -2327319579147636283L;
@@ -28,8 +25,13 @@ public class EventRecord implements Serializable {
private final String originalId;
- private EventRecord(String eventName, String distinctId, Boolean isLoginId, Map propertyMap,
- Integer trackId, String originalId) {
+ private EventRecord(
+ String eventName,
+ String distinctId,
+ Boolean isLoginId,
+ Map propertyMap,
+ Integer trackId,
+ String originalId) {
this.eventName = eventName;
this.distinctId = distinctId;
this.isLoginId = isLoginId;
@@ -43,12 +45,19 @@ private EventRecord(String eventName, String distinctId, Boolean isLoginId, Map<
@Override
public String toString() {
- return "EventRecord{" +
- "propertyMap=" + propertyMap +
- ", eventName='" + eventName + '\'' +
- ", distinctId='" + distinctId + '\'' +
- ", isLoginId='" + isLoginId + '\'' +
- '}';
+ return "EventRecord{"
+ + "propertyMap="
+ + propertyMap
+ + ", eventName='"
+ + eventName
+ + '\''
+ + ", distinctId='"
+ + distinctId
+ + '\''
+ + ", isLoginId='"
+ + isLoginId
+ + '\''
+ + '}';
}
public static Builder builder() {
@@ -75,7 +84,9 @@ public String getOriginalId() {
return originalId;
}
- public Integer getTrackId() {return trackId; }
+ public Integer getTrackId() {
+ return trackId;
+ }
public static class Builder {
private final Map propertyMap = new HashMap<>();
@@ -85,8 +96,8 @@ public static class Builder {
private Integer trackId;
private String originalId;
- private Builder() {
- }
+ private Builder() {}
+
public EventRecord build() throws InvalidArgumentException {
if (eventName == null) {
@@ -98,12 +109,16 @@ public EventRecord build() throws InvalidArgumentException {
if (isLoginId == null) {
throw new InvalidArgumentException("The isLoginId is empty.");
}
- SensorsAnalyticsUtil.assertKey("event_name",eventName);
+ SensorsAnalyticsUtil.assertKey("event_name", eventName);
SensorsAnalyticsUtil.assertProperties("property", propertyMap);
SensorsAnalyticsUtil.assertValue("distinct_id", distinctId);
- String message = String.format("[distinct_id=%s,event_name=%s,is_login_id=%s]",distinctId,eventName,isLoginId);
+ String message =
+ String.format(
+ "[distinct_id=%s,event_name=%s,is_login_id=%s]",
+ distinctId, eventName, isLoginId);
trackId = SensorsAnalyticsUtil.getTrackId(propertyMap, message);
- return new EventRecord(eventName, distinctId, isLoginId, propertyMap,trackId, originalId);
+ return new EventRecord(
+ eventName, distinctId, isLoginId, propertyMap, trackId, originalId);
}
public EventRecord.Builder setOriginalId(String originalId) {
@@ -164,4 +179,4 @@ private void addPropertyObject(String key, Object property) {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/FailedData.java b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/FailedData.java
index 242aaa5..2285366 100644
--- a/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/FailedData.java
+++ b/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/javasdk/bean/FailedData.java
@@ -1,15 +1,12 @@
package com.sensorsdata.analytics.javasdk.bean;
-
-
+import java.util.List;
+import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
-import java.util.List;
-import java.util.Map;
-
/**
* 发送异常数据包装类
*
@@ -22,12 +19,8 @@
@AllArgsConstructor
@ToString
public class FailedData {
- /**
- * 失败原因
- */
- private String failedMessage;
- /**
- * 失败数据
- */
- private List