210 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| //
 | |
| //  TDBaseEvent.m
 | |
| //  ThinkingSDK
 | |
| //
 | |
| //  Created by Yangxiongon 2022/6/12.
 | |
| //
 | |
| 
 | |
| #import "TDBaseEvent.h"
 | |
| 
 | |
| #if __has_include(<ThinkingDataCore/TDJSONUtil.h>)
 | |
| #import <ThinkingDataCore/TDJSONUtil.h>
 | |
| #else
 | |
| #import "TDJSONUtil.h"
 | |
| #endif
 | |
| 
 | |
| #import "TDLogging.h"
 | |
| #import "ThinkingAnalyticsSDKPrivate.h"
 | |
| 
 | |
| NSString * const TD_BACKGROUND_DURATION = @"#background_duration";
 | |
| 
 | |
| kEDEventTypeName const TD_EVENT_TYPE_TRACK           = @"track";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_TRACK_FIRST     = @"track_first";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_TRACK_UPDATE    = @"track_update";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_TRACK_OVERWRITE = @"track_overwrite";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_DEL        = @"user_del";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_ADD        = @"user_add";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_SET        = @"user_set";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_SETONCE    = @"user_setOnce";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_UNSET      = @"user_unset";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_APPEND     = @"user_append";
 | |
| kEDEventTypeName const TD_EVENT_TYPE_USER_UNIQ_APPEND= @"user_uniq_append";
 | |
| 
 | |
| @interface TDBaseEvent ()
 | |
| @property (nonatomic, strong) NSDateFormatter *timeFormatter;
 | |
| 
 | |
| @end
 | |
| 
 | |
| @implementation TDBaseEvent
 | |
| 
 | |
| - (instancetype)init
 | |
| {
 | |
|     self = [super init];
 | |
|     if (self) {
 | |
|         _time = [NSDate date];
 | |
|         self.timeValueType = TDEventTimeValueTypeNone;
 | |
|         self.uuid = [NSUUID UUID].UUIDString;
 | |
|     }
 | |
|     return self;
 | |
| }
 | |
| 
 | |
| - (instancetype)initWithType:(TDEventType)type {
 | |
|     if (self = [self init]) {
 | |
|         self.eventType = type;
 | |
|     }
 | |
|     return self;
 | |
| }
 | |
| 
 | |
| - (void)validateWithError:(NSError *__autoreleasing  _Nullable *)error {
 | |
|     
 | |
| }
 | |
| 
 | |
| - (NSMutableDictionary *)jsonObject {
 | |
|     NSMutableDictionary *dict = [NSMutableDictionary dictionary];
 | |
|     dict[@"#time"] = self.time;
 | |
|     dict[@"#uuid"] = self.uuid;
 | |
|     dict[@"#type"] = [self eventTypeString];
 | |
|     if (self.accountId) {
 | |
|         dict[@"#account_id"] = self.accountId;
 | |
|     }
 | |
|     if (self.distinctId) {
 | |
|         dict[@"#distinct_id"] = self.distinctId;
 | |
|     }
 | |
|     dict[@"properties"] = self.properties;
 | |
|     return dict;
 | |
| }
 | |
| 
 | |
| - (NSMutableDictionary *)formatDateWithDict:(NSDictionary *)dict {
 | |
|     if (dict == nil || ![dict isKindOfClass:NSDictionary.class]) {
 | |
|         return nil;
 | |
|     }
 | |
|     return [TDJSONUtil formatDateWithFormatter:self.h5ZoneOffSet ? self.h5TimeFormatter : self.timeFormatter dict:dict];
 | |
| }
 | |
| 
 | |
| - (NSString *)eventTypeString {
 | |
|     switch (self.eventType) {
 | |
|         case TDEventTypeTrack: {
 | |
|             return TD_EVENT_TYPE_TRACK;
 | |
|         } break;
 | |
|         case TDEventTypeTrackFirst: {
 | |
|             
 | |
|             return TD_EVENT_TYPE_TRACK;
 | |
|         } break;
 | |
|         case TDEventTypeTrackUpdate: {
 | |
|             return TD_EVENT_TYPE_TRACK_UPDATE;
 | |
|         } break;
 | |
|         case TDEventTypeTrackOverwrite: {
 | |
|             return TD_EVENT_TYPE_TRACK_OVERWRITE;
 | |
|         } break;
 | |
|         case TDEventTypeUserAdd: {
 | |
|             return TD_EVENT_TYPE_USER_ADD;
 | |
|         } break;
 | |
|         case TDEventTypeUserSet: {
 | |
|             return TD_EVENT_TYPE_USER_SET;
 | |
|         } break;
 | |
|         case TDEventTypeUserUnset: {
 | |
|             return TD_EVENT_TYPE_USER_UNSET;
 | |
|         } break;
 | |
|         case TDEventTypeUserAppend: {
 | |
|             return TD_EVENT_TYPE_USER_APPEND;
 | |
|         } break;
 | |
|         case TDEventTypeUserUniqueAppend: {
 | |
|             return TD_EVENT_TYPE_USER_UNIQ_APPEND;
 | |
|         } break;
 | |
|         case TDEventTypeUserDel: {
 | |
|             return TD_EVENT_TYPE_USER_DEL;
 | |
|         } break;
 | |
|         case TDEventTypeUserSetOnce: {
 | |
|             return TD_EVENT_TYPE_USER_SETONCE;
 | |
|         } break;
 | |
|             
 | |
|         default:
 | |
|             return nil;
 | |
|             break;
 | |
|     }
 | |
| }
 | |
| 
 | |
| + (TDEventType)typeWithTypeString:(NSString *)typeString {
 | |
|     if ([typeString isEqualToString:TD_EVENT_TYPE_TRACK]) {
 | |
|         return TDEventTypeTrack;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_TRACK_FIRST]) {
 | |
|         return TDEventTypeTrack;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_TRACK_UPDATE]) {
 | |
|         return TDEventTypeTrackUpdate;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_TRACK_OVERWRITE]) {
 | |
|         return TDEventTypeTrackOverwrite;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_ADD]) {
 | |
|         return TDEventTypeUserAdd;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_DEL]) {
 | |
|         return TDEventTypeUserDel;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_SET]) {
 | |
|         return TDEventTypeUserSet;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_UNSET]) {
 | |
|         return TDEventTypeUserUnset;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_APPEND]) {
 | |
|         return TDEventTypeUserAppend;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_UNIQ_APPEND]) {
 | |
|         return TDEventTypeUserUniqueAppend;
 | |
|     } else if ([typeString isEqualToString:TD_EVENT_TYPE_USER_SETONCE]) {
 | |
|         return TDEventTypeUserSetOnce;
 | |
|     }
 | |
|     return TDEventTypeNone;
 | |
| }
 | |
| 
 | |
| //MARK: - Private
 | |
| 
 | |
| //MARK: - Delegate
 | |
| 
 | |
| - (void)ta_validateKey:(NSString *)key value:(id)value error:(NSError *__autoreleasing  _Nullable *)error {
 | |
|     
 | |
| }
 | |
| 
 | |
| //MARK: - Setter & Getter
 | |
| 
 | |
| - (NSMutableDictionary *)properties {
 | |
|     if (!_properties) {
 | |
|         _properties = [NSMutableDictionary dictionary];
 | |
|     }
 | |
|     return _properties;
 | |
| }
 | |
| 
 | |
| -  (void)setTimeZone:(NSTimeZone *)timeZone {
 | |
|     _timeZone = timeZone;
 | |
|     
 | |
|     self.timeFormatter.timeZone = timeZone ?: [NSTimeZone localTimeZone];
 | |
| }
 | |
| 
 | |
| - (NSDateFormatter *)timeFormatter {
 | |
|     if (!_timeFormatter) {
 | |
|         _timeFormatter = [[NSDateFormatter alloc] init];
 | |
|         _timeFormatter.dateFormat = kDefaultTimeFormat;
 | |
|         _timeFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
 | |
|         _timeFormatter.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
 | |
|         
 | |
|         _timeFormatter.timeZone = [NSTimeZone localTimeZone];
 | |
|     }
 | |
|     return _timeFormatter;
 | |
| }
 | |
| 
 | |
| - (NSDateFormatter *)h5TimeFormatter {
 | |
|     double timeZoneNumber = [self.h5ZoneOffSet doubleValue];
 | |
|     NSString *prefix = timeZoneNumber >= 0 ? @"UTC+" : @"UTC-";
 | |
|     int hours = (int)fabs(timeZoneNumber);
 | |
|     int minutes = (int)((fabs(timeZoneNumber) - hours) * 60);
 | |
|     NSString *minutesStr = minutes == 0 ? @":00" : [NSString stringWithFormat:@":%02d", minutes];
 | |
|     NSString *result = [NSString stringWithFormat:@"%@%d%@", prefix, hours, minutesStr];
 | |
|     self.timeFormatter.timeZone = [NSTimeZone timeZoneWithName: result];
 | |
|     return self.timeFormatter;
 | |
| }
 | |
| 
 | |
| - (void)setTime:(NSDate *)time {
 | |
|     
 | |
|     if (time) {
 | |
|         [self willChangeValueForKey:@"time"];
 | |
|         _time = time;
 | |
|         [self didChangeValueForKey:@"time"];
 | |
|     }
 | |
| }
 | |
| 
 | |
| @end
 |