412 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Java
		
	
	
	
		
		
			
		
	
	
			412 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Java
		
	
	
	
|  | /*
 | ||
|  |  * Copyright (C) 2024 ThinkingData
 | ||
|  |  */
 | ||
|  | package cn.thinkingdata.analytics;
 | ||
|  | 
 | ||
|  | import android.content.Context;
 | ||
|  | import android.text.TextUtils;
 | ||
|  | 
 | ||
|  | import org.json.JSONException;
 | ||
|  | import org.json.JSONObject;
 | ||
|  | 
 | ||
|  | import java.util.ArrayList;
 | ||
|  | import java.util.Date;
 | ||
|  | import java.util.HashMap;
 | ||
|  | import java.util.Iterator;
 | ||
|  | import java.util.List;
 | ||
|  | import java.util.Map;
 | ||
|  | import java.util.TimeZone;
 | ||
|  | 
 | ||
|  | import cn.thinkingdata.analytics.TDAnalytics;
 | ||
|  | import cn.thinkingdata.analytics.TDAnalyticsAPI;
 | ||
|  | import cn.thinkingdata.analytics.TDConfig;
 | ||
|  | import cn.thinkingdata.analytics.TDFirstEvent;
 | ||
|  | import cn.thinkingdata.analytics.TDOverWritableEvent;
 | ||
|  | import cn.thinkingdata.analytics.TDUpdatableEvent;
 | ||
|  | import cn.thinkingdata.analytics.ThinkingAnalyticsSDK;
 | ||
|  | 
 | ||
|  | public class ThinkingAnalyticsProxy {
 | ||
|  |     public static void setCustomerLibInfo(String libName, String libVersion) {
 | ||
|  |         TDAnalytics.setCustomerLibInfo(libName, libVersion);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void enableTrackLog(boolean enableLog) {
 | ||
|  |         TDAnalytics.enableLog(enableLog);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void calibrateTime(long timeStampMillis) {
 | ||
|  |         TDAnalytics.calibrateTime(timeStampMillis);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void calibrateTimeWithNtp(String ntpServer) {
 | ||
|  |         TDAnalytics.calibrateTimeWithNtp(ntpServer);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void init(Context context, String appId, String serverUrl, int mode, String name, String timeZone, int version, String publicKey) {
 | ||
|  |         try {
 | ||
|  |             if (context == null || TextUtils.isEmpty(appId) || TextUtils.isEmpty(serverUrl)) {
 | ||
|  |                 return;
 | ||
|  |             }
 | ||
|  |             String instanceName = "";
 | ||
|  |             if (TextUtils.isEmpty(name)) {
 | ||
|  |                 instanceName = appId;
 | ||
|  |             } else {
 | ||
|  |                 instanceName = name;
 | ||
|  |             }
 | ||
|  |             TDConfig tdConfig = TDConfig.getInstance(context, appId, serverUrl, instanceName);
 | ||
|  |             if (!TextUtils.isEmpty(timeZone)) {
 | ||
|  |                 tdConfig.setDefaultTimeZone(TimeZone.getTimeZone(timeZone));
 | ||
|  |             }
 | ||
|  |             if (mode == 1 || mode == 2) {
 | ||
|  |                 tdConfig.setMode(TDConfig.TDMode.values()[mode]);
 | ||
|  |             }
 | ||
|  |             if (version > 0 && !TextUtils.isEmpty(publicKey)) {
 | ||
|  |                 tdConfig.enableEncrypt(version, publicKey);
 | ||
|  |             }
 | ||
|  |             TDAnalytics.init(tdConfig);
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  | 
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void track(String eventName, String properties, long time, String timeZoneId, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 JSONObject pJson = null;
 | ||
|  |                 try {
 | ||
|  |                     pJson = new JSONObject(properties);
 | ||
|  |                 } catch (JSONException ignore) {
 | ||
|  |                 }
 | ||
|  |                 if (time < 0 || TextUtils.isEmpty(timeZoneId)) {
 | ||
|  |                     instance.track(eventName, pJson);
 | ||
|  |                 } else {
 | ||
|  |                     TimeZone timeZone = null;
 | ||
|  |                     if (TextUtils.equals(timeZoneId, "Local")) {
 | ||
|  |                         timeZone = TimeZone.getDefault();
 | ||
|  |                     } else {
 | ||
|  |                         timeZone = TimeZone.getTimeZone(timeZoneId);
 | ||
|  |                     }
 | ||
|  |                     instance.track(eventName, pJson, new Date(time), timeZone);
 | ||
|  |                 }
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void trackEvent(int type, String eventName, String properties, String eventId, long time, String timeZoneId, String appId) {
 | ||
|  |         try {
 | ||
|  |             Date date = null;
 | ||
|  |             if (time > 0) {
 | ||
|  |                 date = new Date(time);
 | ||
|  |             }
 | ||
|  |             TimeZone timeZone = null;
 | ||
|  |             if (TextUtils.equals(timeZoneId, "Local")) {
 | ||
|  |                 timeZone = TimeZone.getDefault();
 | ||
|  |             } else {
 | ||
|  |                 timeZone = TimeZone.getTimeZone(timeZoneId);
 | ||
|  |             }
 | ||
|  |             JSONObject pJson = null;
 | ||
|  |             try {
 | ||
|  |                 pJson = new JSONObject(properties);
 | ||
|  |             } catch (JSONException ignore) {
 | ||
|  |             }
 | ||
|  |             if (type == 0) {
 | ||
|  |                 TDFirstEvent firstEvent = new TDFirstEvent(eventName, pJson);
 | ||
|  |                 firstEvent.setFirstCheckId(eventId);
 | ||
|  |                 firstEvent.setEventTime(date, timeZone);
 | ||
|  |                 TDAnalyticsAPI.track(firstEvent, appId);
 | ||
|  |             } else if (type == 1) {
 | ||
|  |                 TDUpdatableEvent updatableEvent = new TDUpdatableEvent(eventName, pJson, eventId);
 | ||
|  |                 updatableEvent.setEventTime(date, timeZone);
 | ||
|  |                 TDAnalyticsAPI.track(updatableEvent, appId);
 | ||
|  |             } else if (type == 2) {
 | ||
|  |                 TDOverWritableEvent overWritableEvent = new TDOverWritableEvent(eventName, pJson, eventId);
 | ||
|  |                 overWritableEvent.setEventTime(date, timeZone);
 | ||
|  |                 TDAnalyticsAPI.track(overWritableEvent, appId);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     public static void timeEvent(String eventName, String appId) {
 | ||
|  |         TDAnalyticsAPI.timeEvent(eventName, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void login(String accountId, String appId) {
 | ||
|  |         TDAnalyticsAPI.login(accountId, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void logout(String appId) {
 | ||
|  |         TDAnalyticsAPI.logout(appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void identify(String distinctId, String appId) {
 | ||
|  |         TDAnalyticsAPI.setDistinctId(distinctId, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static String getDistinctId(String appId) {
 | ||
|  |         return TDAnalyticsAPI.getDistinctId(appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userSet(String properties, long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_set(new JSONObject(properties), date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userUnset(String properties, long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_unset(new JSONObject(properties), date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userSetOnce(String properties, long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_setOnce(new JSONObject(properties), date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  | 
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userAdd(String properties, long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_add(new JSONObject(properties), date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  | 
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userDel(long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_delete(date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userAppend(String properties, long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_append(new JSONObject(properties), date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void userUniqAppend(String properties, long time, String appId) {
 | ||
|  |         try {
 | ||
|  |             ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |             if (null != instance) {
 | ||
|  |                 Date date = null;
 | ||
|  |                 if (time > 0) {
 | ||
|  |                     date = new Date(time);
 | ||
|  |                 }
 | ||
|  |                 instance.user_uniqAppend(new JSONObject(properties), date);
 | ||
|  |             }
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void setSuperProperties(String properties, String appId) {
 | ||
|  |         try {
 | ||
|  |             TDAnalyticsAPI.setSuperProperties(new JSONObject(properties), appId);
 | ||
|  |         } catch (Exception ignore) {
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void unsetSuperProperty(String property, String appId) {
 | ||
|  |         TDAnalyticsAPI.unsetSuperProperty(property, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void clearSuperProperties(String appId) {
 | ||
|  |         TDAnalyticsAPI.clearSuperProperties(appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static String getSuperProperties(String appId) {
 | ||
|  |         return TDAnalyticsAPI.getSuperProperties(appId).toString();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static String getPresetProperties(String appId) {
 | ||
|  |         return TDAnalyticsAPI.getPresetProperties(appId).toEventPresetProperties().toString();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void flush(String appId) {
 | ||
|  |         TDAnalyticsAPI.flush(appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static String getDeviceId() {
 | ||
|  |         return TDAnalytics.getDeviceId();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void setTrackStatus(int status, String appId) {
 | ||
|  |         TDAnalytics.TDTrackStatus trackStatus = TDAnalytics.TDTrackStatus.NORMAL;
 | ||
|  |         if (status == 1) {
 | ||
|  |             trackStatus = TDAnalytics.TDTrackStatus.PAUSE;
 | ||
|  |         } else if (status == 2) {
 | ||
|  |             trackStatus = TDAnalytics.TDTrackStatus.STOP;
 | ||
|  |         } else if (status == 3) {
 | ||
|  |             trackStatus = TDAnalytics.TDTrackStatus.SAVE_ONLY;
 | ||
|  |         }
 | ||
|  |         TDAnalyticsAPI.setTrackStatus(trackStatus, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static String createLightInstance(String appId) {
 | ||
|  |         return TDAnalyticsAPI.lightInstance(appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void setNetworkType(int type, String appId) {
 | ||
|  |         if (type == 0 || type == 2) {
 | ||
|  |             TDAnalyticsAPI.setNetworkType(TDAnalytics.TDNetworkType.ALL, appId);
 | ||
|  |         } else if (type == 1) {
 | ||
|  |             TDAnalyticsAPI.setNetworkType(TDAnalytics.TDNetworkType.WIFI, appId);
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void enableThirdPartySharing(int types, String params, String appId) {
 | ||
|  |         Map<String, Object> maps = new HashMap<>();
 | ||
|  |         try {
 | ||
|  |             JSONObject json = new JSONObject(params);
 | ||
|  |             for (Iterator<String> it = json.keys(); it.hasNext(); ) {
 | ||
|  |                 String key = it.next();
 | ||
|  |                 maps.put(key, json.opt(key));
 | ||
|  |             }
 | ||
|  |         } catch (JSONException ignore) {
 | ||
|  |         }
 | ||
|  |         if (maps.isEmpty()) {
 | ||
|  |             TDAnalyticsAPI.enableThirdPartySharing(types, appId);
 | ||
|  |         } else {
 | ||
|  |             TDAnalyticsAPI.enableThirdPartySharing(types, maps, appId);
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void setDynamicSuperPropertiesTrackerListener(String appId, DynamicSuperPropertiesTrackerListener listener) {
 | ||
|  |         ThinkingAnalyticsSDK ta = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |         if (null == ta) return;
 | ||
|  |         ta.setAutoTrackDynamicProperties(new ThinkingAnalyticsSDK.AutoTrackDynamicProperties() {
 | ||
|  |             @Override
 | ||
|  |             public JSONObject getAutoTrackDynamicProperties() {
 | ||
|  |                 try {
 | ||
|  |                     String pStr = listener.getDynamicSuperPropertiesString();
 | ||
|  |                     if (pStr != null) {
 | ||
|  |                         return new JSONObject(pStr);
 | ||
|  |                     }
 | ||
|  |                 } catch (JSONException e) {
 | ||
|  |                     e.printStackTrace();
 | ||
|  |                 }
 | ||
|  |                 return new JSONObject();
 | ||
|  |             }
 | ||
|  |         });
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void enableAutoTrack(int types, String properties, String appId) {
 | ||
|  |         JSONObject json = null;
 | ||
|  |         try {
 | ||
|  |             json = new JSONObject(properties);
 | ||
|  |         } catch (JSONException ignore) {
 | ||
|  |         }
 | ||
|  |         TDAnalyticsAPI.enableAutoTrack(types, json, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void setAutoTrackProperties(int types, String properties, String appId) {
 | ||
|  |         JSONObject json = null;
 | ||
|  |         try {
 | ||
|  |             json = new JSONObject(properties);
 | ||
|  |         } catch (JSONException ignore) {
 | ||
|  |         }
 | ||
|  |         if (json == null) return;
 | ||
|  |         ThinkingAnalyticsSDK instance = TDAnalyticsAPI.getInstance(appId);
 | ||
|  |         List<ThinkingAnalyticsSDK.AutoTrackEventType> eventTypeList = new ArrayList<>();
 | ||
|  |         if ((types & TDAnalytics.TDAutoTrackEventType.APP_START) > 0) {
 | ||
|  |             eventTypeList.add(ThinkingAnalyticsSDK.AutoTrackEventType.APP_START);
 | ||
|  |         }
 | ||
|  |         if ((types & TDAnalytics.TDAutoTrackEventType.APP_END) > 0) {
 | ||
|  |             eventTypeList.add(ThinkingAnalyticsSDK.AutoTrackEventType.APP_END);
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         if ((types & TDAnalytics.TDAutoTrackEventType.APP_INSTALL) > 0) {
 | ||
|  |             eventTypeList.add(ThinkingAnalyticsSDK.AutoTrackEventType.APP_INSTALL);
 | ||
|  |         }
 | ||
|  |         if ((types & TDAnalytics.TDAutoTrackEventType.APP_CRASH) > 0) {
 | ||
|  |             eventTypeList.add(ThinkingAnalyticsSDK.AutoTrackEventType.APP_CRASH);
 | ||
|  |         }
 | ||
|  |         instance.setAutoTrackProperties(eventTypeList, json);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public static void enableAutoTrack(int types, AutoTrackEventTrackerListener listener, String appId) {
 | ||
|  |         TDAnalyticsAPI.enableAutoTrack(types, new TDAnalytics.TDAutoTrackEventHandler() {
 | ||
|  |             @Override
 | ||
|  |             public JSONObject getAutoTrackEventProperties(int i, JSONObject jsonObject) {
 | ||
|  |                 try {
 | ||
|  |                     String name = appId;
 | ||
|  |                     if (TextUtils.isEmpty(name)) {
 | ||
|  |                         name = TDAnalytics.instance.mConfig.getName();
 | ||
|  |                     }
 | ||
|  |                     String eStr = listener.eventCallback(i, name, jsonObject.toString());
 | ||
|  |                     if (eStr != null) {
 | ||
|  |                         return new JSONObject(eStr);
 | ||
|  |                     }
 | ||
|  |                 } catch (JSONException e) {
 | ||
|  |                     e.printStackTrace();
 | ||
|  |                 }
 | ||
|  |                 return new JSONObject();
 | ||
|  |             }
 | ||
|  |         }, appId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public interface DynamicSuperPropertiesTrackerListener {
 | ||
|  |         String getDynamicSuperPropertiesString();
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public interface AutoTrackEventTrackerListener {
 | ||
|  |         /**
 | ||
|  |          * Callback event name and current properties and get dynamic properties
 | ||
|  |          *
 | ||
|  |          * @return dynamic properties String
 | ||
|  |          */
 | ||
|  |         String eventCallback(int type, String appId, String properties);
 | ||
|  |     }
 | ||
|  | }
 |