210 lines
6.5 KiB
Mathematica
210 lines
6.5 KiB
Mathematica
|
|
//
|
||
|
|
// 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
|