329 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			329 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| //
 | |
| //  TDAnalytics+Public.m
 | |
| //  ThinkingSDK
 | |
| //
 | |
| //  Created by 杨雄 on 2023/8/17.
 | |
| //
 | |
| 
 | |
| #import "TDAnalytics+Public.h"
 | |
| #import "TDAnalytics+Multiple.h"
 | |
| #import "ThinkingAnalyticsSDKPrivate.h"
 | |
| #import "TDLogging.h"
 | |
| #import "TDPublicConfig.h"
 | |
| #import "TDConfigPrivate.h"
 | |
| 
 | |
| #if __has_include(<ThinkingDataCore/TDCalibratedTime.h>)
 | |
| #import <ThinkingDataCore/TDCalibratedTime.h>
 | |
| #else
 | |
| #import "TDCalibratedTime.h"
 | |
| #endif
 | |
| 
 | |
| #if __has_include(<ThinkingDataCore/TDCoreDeviceInfo.h>)
 | |
| #import <ThinkingDataCore/TDCoreDeviceInfo.h>
 | |
| #else
 | |
| #import "TDCoreDeviceInfo.h"
 | |
| #endif
 | |
| 
 | |
| #if __has_include(<ThinkingDataCore/NSString+TDCore.h>)
 | |
| #import <ThinkingDataCore/NSString+TDCore.h>
 | |
| #else
 | |
| #import "NSString+TDCore.h"
 | |
| #endif
 | |
| 
 | |
| #if __has_include(<ThinkingDataCore/NSURL+TDCore.h>)
 | |
| #import <ThinkingDataCore/NSURL+TDCore.h>
 | |
| #else
 | |
| #import "NSURL+TDCore.h"
 | |
| #endif
 | |
| 
 | |
| @implementation TDAnalytics (Public)
 | |
| 
 | |
| #pragma mark - Logging
 | |
| 
 | |
| + (void)enableLog:(BOOL)enable {
 | |
|     [TDLogging sharedInstance].loggingLevel = enable ? TDLoggingLevelDebug : TDLoggingLevelNone;
 | |
| }
 | |
| 
 | |
| #pragma mark - Calibrate time
 | |
| 
 | |
| + (void)calibrateTime:(NSTimeInterval)timestamp {
 | |
|     [[TDCalibratedTime sharedInstance] recalibrationWithTimeInterval:timestamp/1000.0];
 | |
| }
 | |
| 
 | |
| + (void)calibrateTimeWithNtp:(NSString *)ntpServer {
 | |
|     if ([ntpServer isKindOfClass:[NSString class]] && ntpServer.length > 0) {
 | |
|         [[TDCalibratedTime sharedInstance] recalibrationWithNtps:@[ntpServer]];
 | |
|     }
 | |
| }
 | |
| 
 | |
| // MARK: info
 | |
| 
 | |
| + (nullable NSString *)getLocalRegion {
 | |
|     NSString *countryCode = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
 | |
|     return countryCode;
 | |
| }
 | |
| 
 | |
| + (void)setCustomerLibInfoWithLibName:(NSString *)libName libVersion:(NSString *)libVersion {
 | |
|     if (libName.length > 0) {
 | |
|         [TDDeviceInfo sharedManager].libName = libName;
 | |
|     }
 | |
|     if (libVersion.length > 0) {
 | |
|         [TDDeviceInfo sharedManager].libVersion = libVersion;
 | |
|     }
 | |
| }
 | |
| 
 | |
| + (NSString *)getSDKVersion {
 | |
|     return TDPublicConfig.version;
 | |
| }
 | |
| 
 | |
| + (NSString *)getDeviceId {
 | |
|     return [TDCoreDeviceInfo deviceId];
 | |
| }
 | |
| 
 | |
| + (NSString *)timeStringWithDate:(NSDate *)date {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     return [TDAnalytics timeStringWithDate:date withAppId:appId];
 | |
| }
 | |
| 
 | |
| //MARK: - init
 | |
| 
 | |
| + (void)startAnalyticsWithAppId:(NSString *)appId serverUrl:(NSString *)url {
 | |
|     TDConfig *config = [[TDConfig alloc] init];
 | |
|     config.appid = appId;
 | |
|     config.serverUrl = url;
 | |
|     [self startAnalyticsWithConfig:config];
 | |
| }
 | |
| 
 | |
| + (void)startAnalyticsWithConfig:(TDConfig *)config {
 | |
|     if (!config) {
 | |
|         return;
 | |
|     }
 | |
|     config.appid = [config.appid td_trim];
 | |
|     
 | |
|     NSString *appId = config.appid;
 | |
|     if (appId.length == 0) {
 | |
|         return;
 | |
|     }
 | |
|     
 | |
|     NSMutableDictionary *instances = [ThinkingAnalyticsSDK _getAllInstances];
 | |
|     if ([instances objectForKey:[config innerGetMapInstanceToken]]) {
 | |
|         return;
 | |
|     }
 | |
|     
 | |
|     config.serverUrl = [NSURL td_baseUrlStringWithString:config.serverUrl];
 | |
|     NSString *url = config.serverUrl;
 | |
|     if (url.length == 0) {
 | |
|         return;
 | |
|     }
 | |
|     
 | |
|     ThinkingAnalyticsSDK *sdk = [[ThinkingAnalyticsSDK alloc] initWithConfig:config];
 | |
|     TDLogInfo(@"instance token: %@", [sdk.config innerGetMapInstanceToken]);
 | |
| }
 | |
| 
 | |
| + (NSString *)lightInstanceIdWithAppId:(NSString *)appId {
 | |
|     ThinkingAnalyticsSDK *instance = [ThinkingAnalyticsSDK instanceWithAppid:appId];
 | |
|     if (instance) {
 | |
|         ThinkingAnalyticsSDK *lightInstance = [instance innerCreateLightInstance];
 | |
|         return [lightInstance.config innerGetMapInstanceToken];
 | |
|     }
 | |
|     return nil;
 | |
| }
 | |
| 
 | |
| //MARK: track
 | |
| 
 | |
| + (void)flush {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics flushWithAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)setTrackStatus:(TDTrackStatus)status {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setTrackStatus:status withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)track:(NSString *)eventName {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics track:eventName withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)track:(NSString *)eventName properties:(nullable NSDictionary *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics track:eventName properties:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)track:(NSString *)eventName properties:(nullable NSDictionary *)properties time:(NSDate *)time timeZone:(NSTimeZone *)timeZone {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics track:eventName properties:properties time:time timeZone:timeZone withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)trackWithEventModel:(TDEventModel *)eventModel {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics trackWithEventModel:eventModel withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)timeEvent:(NSString *)eventName {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics timeEvent:eventName withAppId:appId];
 | |
| }
 | |
| 
 | |
| //MARK: user property
 | |
| 
 | |
| + (void)userSet:(NSDictionary<NSString *, id> *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userSet:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userSetOnce:(NSDictionary<NSString *, id> *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userSetOnce:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userUnset:(NSString *)propertyName {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userUnset:propertyName withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userUnsets:(NSArray<NSString *> *)propertyNames {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userUnsets:propertyNames withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userAdd:(NSDictionary<NSString *, id> *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userAdd:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userAddWithName:(NSString *)propertyName andValue:(NSNumber *)propertyValue {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userAddWithName:propertyName andValue:propertyValue withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userAppend:(NSDictionary<NSString *, NSArray *> *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userAppend:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userUniqAppend:(NSDictionary<NSString *, NSArray *> *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userUniqAppend:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)userDelete {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics userDeleteWithAppId:appId];
 | |
| }
 | |
| 
 | |
| //MARK: super property & preset property
 | |
| 
 | |
| + (void)setSuperProperties:(NSDictionary<NSString *, id> *)properties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setSuperProperties:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)unsetSuperProperty:(NSString *)property {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics unsetSuperProperty:property withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)clearSuperProperties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics clearSuperPropertiesWithAppId:appId];
 | |
| }
 | |
| 
 | |
| + (NSDictionary *)getSuperProperties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     return [TDAnalytics getSuperPropertiesWithAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)setDynamicSuperProperties:(NSDictionary<NSString *, id> *(^)(void))propertiesHandler {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setDynamicSuperProperties:propertiesHandler withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (TDPresetProperties *)getPresetProperties {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     return [TDAnalytics getPresetPropertiesWithAppId:appId];
 | |
| }
 | |
| 
 | |
| //MARK: error callback
 | |
| 
 | |
| + (void)registerErrorCallback:(void(^)(NSInteger code, NSString * _Nullable errorMsg, NSString * _Nullable ext))errorCallback {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics registerErrorCallback:errorCallback withAppId:appId];
 | |
| }
 | |
| 
 | |
| //MARK: custom property
 | |
| 
 | |
| + (void)setDistinctId:(NSString *)distinctId {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setDistinctId:distinctId withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (NSString *)getDistinctId {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     return [TDAnalytics getDistinctIdWithAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)login:(NSString *)accountId {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics login:accountId withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (NSString *)getAccountId {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     return [TDAnalytics getAccountIdWithAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)logout {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics logoutWithAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)setUploadingNetworkType:(TDReportingNetworkType)type {
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setUploadingNetworkType:type withAppId:appId];
 | |
| }
 | |
| 
 | |
| // MARK: auto track
 | |
| 
 | |
| #if TARGET_OS_IOS
 | |
| 
 | |
| + (void)enableAutoTrack:(TDAutoTrackEventType)eventType API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics enableAutoTrack:eventType withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)enableAutoTrack:(TDAutoTrackEventType)eventType properties:(NSDictionary * _Nullable)properties API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics enableAutoTrack:eventType properties:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)enableAutoTrack:(TDAutoTrackEventType)eventType callback:(NSDictionary *(^ _Nullable)(TDAutoTrackEventType, NSDictionary *))callback API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics enableAutoTrack:eventType callback:callback withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)ignoreAutoTrackViewControllers:(nonnull NSArray<NSString *> *)controllers API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics ignoreAutoTrackViewControllers:controllers withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)ignoreViewType:(nonnull Class)aClass API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics ignoreViewType:aClass withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)setAutoTrackProperties:(TDAutoTrackEventType)eventType properties:(NSDictionary * _Nullable)properties API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setAutoTrackProperties:eventType properties:properties withAppId:appId];
 | |
| }
 | |
| 
 | |
| + (void)setAutoTrackDynamicProperties:(NSDictionary<NSString *,id> * _Nonnull (^)(void))dynamicSuperProperties API_UNAVAILABLE(macos){
 | |
|     NSString *appId = [ThinkingAnalyticsSDK defaultAppId];
 | |
|     [TDAnalytics setAutoTrackDynamicProperties:dynamicSuperProperties withAppId:appId];
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| @end
 |