2929import com .facebook .react .bridge .ReadableArray ;
3030import com .facebook .react .bridge .ReadableMap ;
3131import com .facebook .react .bridge .WritableMap ;
32+ import com .sensorsdata .analytics .android .sdk .SAConfigOptions ;
33+ import com .sensorsdata .analytics .android .sdk .SALog ;
3234import com .sensorsdata .analytics .android .sdk .SensorsDataAPI ;
3335import com .sensorsdata .analytics .property .RNPropertyManager ;
3436import com .sensorsdata .analytics .utils .RNUtils ;
37+ import com .sensorsdata .analytics .utils .VersionUtils ;
3538
3639import org .json .JSONObject ;
3740
@@ -464,7 +467,7 @@ public void getDistinctId(Callback successCallback, Callback errorCallback) {
464467 */
465468 @ ReactMethod
466469 public void getDistinctIdPromise (Promise promise ) {
467- if (promise == null ){
470+ if (promise == null ) {
468471 return ;
469472 }
470473 try {
@@ -493,7 +496,7 @@ public void getDistinctIdPromise(Promise promise) {
493496 */
494497 @ ReactMethod
495498 public void getAnonymousIdPromise (Promise promise ) {
496- if (promise == null ){
499+ if (promise == null ) {
497500 return ;
498501 }
499502 try {
@@ -630,7 +633,6 @@ public void identify(String anonymousId) {
630633
631634 /**
632635 * 导出 trackTimerPause 方法给 RN 使用.
633- *
634636 * <p>暂停事件计时器,计时单位为秒。
635637 *
636638 * @param eventName 事件的名称
@@ -646,12 +648,11 @@ public void trackTimerPause(String eventName) {
646648 }
647649
648650 /**
649- * 导出 trackTimerResume 方法给 RN 使用.
650- *
651- * <p>恢复事件计时器,计时单位为秒。
652- *
653- * @param eventName 事件的名称
654- */
651+ * 导出 trackTimerResume 方法给 RN 使用.
652+ * <p>恢复事件计时器,计时单位为秒。
653+ *
654+ * @param eventName 事件的名称
655+ */
655656 @ ReactMethod
656657 public void trackTimerResume (String eventName ) {
657658 try {
@@ -663,13 +664,13 @@ public void trackTimerResume(String eventName) {
663664 }
664665
665666 /**
666- * 保存用户推送 ID 到用户表
667- *
668- * @param pushTypeKey 属性名称(例如 jgId)
669- * @param pushId 推送 ID
670- * <p>使用 profilePushId("jgId", pushId) 例如极光 pushId
671- * 获取方式:JPushModule.getRegistrationID(callback)
672- */
667+ * 保存用户推送 ID 到用户表
668+ *
669+ * @param pushTypeKey 属性名称(例如 jgId)
670+ * @param pushId 推送 ID
671+ * <p>使用 profilePushId("jgId", pushId) 例如极光 pushId
672+ * 获取方式:JPushModule.getRegistrationID(callback)
673+ */
673674 @ ReactMethod
674675 public void profilePushId (String pushTypeKey , String pushId ) {
675676 try {
@@ -681,10 +682,10 @@ public void profilePushId(String pushTypeKey, String pushId) {
681682 }
682683
683684 /**
684- * 删除用户设置的 pushId
685- *
686- * @param pushTypeKey 属性名称(例如 jgId)
687- */
685+ * 删除用户设置的 pushId
686+ *
687+ * @param pushTypeKey 属性名称(例如 jgId)
688+ */
688689 @ ReactMethod
689690 public void profileUnsetPushId (String pushTypeKey ) {
690691 try {
@@ -709,10 +710,10 @@ public void resetAnonymousId() {
709710 }
710711
711712 /**
712- * 设置当前 serverUrl
713- *
714- * @param serverUrl 当前 serverUrl
715- */
713+ * 设置当前 serverUrl
714+ *
715+ * @param serverUrl 当前 serverUrl
716+ */
716717 @ ReactMethod
717718 public void setServerUrl (String serverUrl ) {
718719 try {
@@ -724,12 +725,12 @@ public void setServerUrl(String serverUrl) {
724725 }
725726
726727 /**
727- * 设置 item
728- *
729- * @param itemType item 类型
730- * @param itemId item ID
731- * @param properties item 相关属性
732- */
728+ * 设置 item
729+ *
730+ * @param itemType item 类型
731+ * @param itemId item ID
732+ * @param properties item 相关属性
733+ */
733734 @ ReactMethod
734735 public void itemSet (final String itemType , final String itemId , ReadableMap properties ) {
735736 try {
@@ -741,11 +742,11 @@ public void itemSet(final String itemType, final String itemId, ReadableMap prop
741742 }
742743
743744 /**
744- * 删除 item
745- *
746- * @param itemType item 类型
747- * @param itemId item ID
748- */
745+ * 删除 item
746+ *
747+ * @param itemType item 类型
748+ * @param itemId item ID
749+ */
749750 @ ReactMethod
750751 public void itemDelete (final String itemType , final String itemId ) {
751752 try {
@@ -761,7 +762,7 @@ public void itemDelete(final String itemType, final String itemId) {
761762 */
762763 @ ReactMethod
763764 public void getSuperPropertiesPromise (Promise promise ) {
764- if (promise == null ){
765+ if (promise == null ) {
765766 return ;
766767 }
767768 try {
@@ -782,7 +783,7 @@ public void getSuperPropertiesPromise(Promise promise) {
782783 */
783784 @ ReactMethod
784785 public void getPresetPropertiesPromise (Promise promise ) {
785- if (promise == null ){
786+ if (promise == null ) {
786787 return ;
787788 }
788789 try {
@@ -799,10 +800,10 @@ public void getPresetPropertiesPromise(Promise promise) {
799800 }
800801
801802 /**
802- * 获取当前用户的 loginId 若调用前未调用 {@link #login(String)} 设置用户的 loginId,会返回 null
803- *
804- * @return 当前用户的 loginId
805- */
803+ * 获取当前用户的 loginId 若调用前未调用 {@link #login(String)} 设置用户的 loginId,会返回 null
804+ *
805+ * @return 当前用户的 loginId
806+ */
806807 @ ReactMethod
807808 public void getLoginIdPromise (Promise promise ) {
808809 if (promise == null ) {
@@ -818,13 +819,12 @@ public void getLoginIdPromise(Promise promise) {
818819 }
819820
820821 /**
821- * 设置 App 切换到后台与下次事件的事件间隔
822- * 默认值为 30*1000 毫秒
823- * 若 App 在后台超过设定事件,则认为当前 Session 结束,发送 $AppEnd 事件
824- *
825- * @platform Android
826- * @param sessionIntervalTime int
827- */
822+ * 设置 App 切换到后台与下次事件的事件间隔
823+ * 默认值为 30*1000 毫秒
824+ * 若 App 在后台超过设定事件,则认为当前 Session 结束,发送 $AppEnd 事件
825+ *
826+ * @param sessionIntervalTime int
827+ */
828828 @ ReactMethod
829829 public void setSessionIntervalTime (int sessionIntervalTime ) {
830830 SensorsDataAPI .sharedInstance ().setSessionIntervalTime (sessionIntervalTime );
@@ -835,7 +835,6 @@ public void setSessionIntervalTime(int sessionIntervalTime) {
835835 * 默认值为 30*1000 毫秒
836836 * 若 App 在后台超过设定事件,则认为当前 Session 结束,发送 $AppEnd 事件
837837 *
838- * @platform Android
839838 * @return 返回设置的 SessionIntervalTime ,默认是 30s
840839 */
841840 @ ReactMethod
@@ -858,7 +857,7 @@ public void getSessionIntervalTimePromise(Promise promise) {
858857 * @return true: 开启 AutoTrack; false:没有开启 AutoTrack
859858 */
860859 @ ReactMethod
861- public void isAutoTrackEnabledPromise (Promise promise ){
860+ public void isAutoTrackEnabledPromise (Promise promise ) {
862861 if (promise == null ) {
863862 return ;
864863 }
@@ -877,7 +876,7 @@ public void isAutoTrackEnabledPromise(Promise promise){
877876 * @return true 代表开启了可视化全埋点, false 代表关闭了可视化全埋点
878877 */
879878 @ ReactMethod
880- public void isVisualizedAutoTrackEnabledPromise (Promise promise ){
879+ public void isVisualizedAutoTrackEnabledPromise (Promise promise ) {
881880 if (promise == null ) {
882881 return ;
883882 }
@@ -896,7 +895,7 @@ public void isVisualizedAutoTrackEnabledPromise(Promise promise){
896895 * @return true 代表开启了点击图,false 代表关闭了点击图
897896 */
898897 @ ReactMethod
899- public void isHeatMapEnabledPromise (Promise promise ){
898+ public void isHeatMapEnabledPromise (Promise promise ) {
900899 if (promise == null ) {
901900 return ;
902901 }
@@ -921,7 +920,7 @@ public void isHeatMapEnabledPromise(Promise promise){
921920 * 例:若需要开启 4G 5G 发送数据,则需要设置 4 + 16 = 20
922921 */
923922 @ ReactMethod
924- public void setFlushNetworkPolicy (int networkType ){
923+ public void setFlushNetworkPolicy (int networkType ) {
925924 try {
926925 SensorsDataAPI .sharedInstance ().setFlushNetworkPolicy (networkType );
927926 } catch (Exception e ) {
@@ -933,11 +932,10 @@ public void setFlushNetworkPolicy(int networkType){
933932 /**
934933 * 设置是否允许请求网络,默认是 true
935934 *
936- * @platform Android
937935 * @param isRequest boolean
938936 */
939937 @ ReactMethod
940- public void enableNetworkRequest (boolean isRequest ){
938+ public void enableNetworkRequest (boolean isRequest ) {
941939 try {
942940 SensorsDataAPI .sharedInstance ().enableNetworkRequest (isRequest );
943941 } catch (Exception e ) {
@@ -949,11 +947,10 @@ public void enableNetworkRequest(boolean isRequest){
949947 /**
950948 * 是否允许请求网络,默认是 true
951949 *
952- * @platform Android
953950 * @return 是否允许请求网络
954951 */
955952 @ ReactMethod
956- public void isNetworkRequestEnablePromise (Promise promise ){
953+ public void isNetworkRequestEnablePromise (Promise promise ) {
957954 if (promise == null ) {
958955 return ;
959956 }
@@ -987,12 +984,16 @@ public void trackAppInstall(ReadableMap properties) {
987984 * 开启数据采集
988985 */
989986 @ ReactMethod
987+ @ Deprecated
990988 public void enableDataCollect () {
991- try {
992- SensorsDataAPI .sharedInstance ().enableDataCollect ();
993- } catch (Exception e ) {
994- e .printStackTrace ();
995- Log .e (LOGTAG , e .toString () + "" );
989+ if (!VersionUtils .checkSAVersion ("6.4.0" )) {
990+ try {
991+ SensorsDataAPI .sharedInstance ().enableDataCollect ();
992+ SALog .i (LOGTAG , "enableDataCollect() 方法已在 「6.4.0」版本删除!可升级致该版本后使用延迟初始化方案" );
993+ } catch (Exception e ) {
994+ e .printStackTrace ();
995+ Log .e (LOGTAG , e .toString () + "" );
996+ }
996997 }
997998 }
998999
@@ -1027,4 +1028,48 @@ public void unbind(String key, String value) {
10271028 Log .e (LOGTAG , e .toString () + "" );
10281029 }
10291030 }
1031+
1032+ @ ReactMethod
1033+ public void init (ReadableMap config ) {
1034+ if (getCurrentActivity () == null ) {
1035+ return ;
1036+ }
1037+ try {
1038+ JSONObject configJson = RNUtils .convertToJSONObject (config );
1039+ SAConfigOptions saConfigOptions ;
1040+ if (configJson == null ) {
1041+ saConfigOptions = new SAConfigOptions ("" );
1042+ } else {
1043+ saConfigOptions = new SAConfigOptions (configJson .optString ("server_url" ));
1044+ saConfigOptions .enableLog (configJson .optBoolean ("show_log" ))
1045+ .enableEncrypt (configJson .optBoolean ("encrypt" ))
1046+ .setAutoTrackEventType (configJson .optInt ("auto_track" , 0 ))
1047+ .setFlushBulkSize (configJson .optInt ("flush_bulksize" , 100 ))
1048+ .setFlushInterval (configJson .optInt ("flush_interval" , 15000 ));
1049+ JSONObject androidConfig = configJson .optJSONObject ("android" );
1050+ boolean javascriptBridge = configJson .optBoolean ("javascript_bridge" , false );
1051+ boolean isSupportJellybean = false ;
1052+ if (androidConfig != null && androidConfig .length () > 0 ) {
1053+ saConfigOptions .setMaxCacheSize (androidConfig .optLong ("max_cache_size" , 32 * 1024 * 1024 ));
1054+ if (androidConfig .optBoolean ("sub_process_flush" , false )) {
1055+ saConfigOptions .enableSubProcessFlushData ();
1056+ }
1057+ isSupportJellybean = androidConfig .optBoolean ("jellybean" , false );
1058+ }
1059+ if (javascriptBridge ) {
1060+ saConfigOptions .enableJavaScriptBridge (isSupportJellybean );
1061+ }
1062+ JSONObject visualizedConfig = configJson .optJSONObject ("visualized" );
1063+ if (visualizedConfig != null && visualizedConfig .length () > 0 ) {
1064+ saConfigOptions .enableVisualizedAutoTrack (visualizedConfig .optBoolean ("auto_track" , false ));
1065+ saConfigOptions .enableVisualizedProperties (visualizedConfig .optBoolean ("properties" , false ));
1066+ }
1067+ saConfigOptions .enableHeatMap (configJson .optBoolean ("heat_map" , false ));
1068+ }
1069+ SensorsDataAPI .startWithConfigOptions (getCurrentActivity (), saConfigOptions );
1070+ SALog .i (LOGTAG , "init success" );
1071+ } catch (Exception e ) {
1072+ SALog .i (LOGTAG , "SDK init failed:" + e .getMessage ());
1073+ }
1074+ }
10301075}
0 commit comments