78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
|  | //
 | ||
|  | //  TDAutoTracker.m
 | ||
|  | //  ThinkingSDK
 | ||
|  | //
 | ||
|  | //  Created by wwango on 2021/10/13.
 | ||
|  | //  Copyright © 2021 thinkingdata. All rights reserved.
 | ||
|  | //
 | ||
|  | 
 | ||
|  | #import "TDAutoTracker.h"
 | ||
|  | #import "ThinkingAnalyticsSDKPrivate.h"
 | ||
|  | 
 | ||
|  | #if __has_include(<ThinkingDataCore/ThinkingDataCore.h>)
 | ||
|  | #import <ThinkingDataCore/ThinkingDataCore.h>
 | ||
|  | #else
 | ||
|  | #import "ThinkingDataCore.h"
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | @interface TDAutoTracker ()
 | ||
|  | 
 | ||
|  | @property (nonatomic, strong) NSMutableDictionary<NSString *, NSNumber *> *trackCounts;
 | ||
|  | 
 | ||
|  | @end
 | ||
|  | 
 | ||
|  | @implementation TDAutoTracker
 | ||
|  | 
 | ||
|  | - (instancetype)init
 | ||
|  | {
 | ||
|  |     self = [super init];
 | ||
|  |     if (self) {
 | ||
|  |         _isOneTime = NO;
 | ||
|  |         _autoFlush = YES;
 | ||
|  |         _additionalCondition = YES;
 | ||
|  |         
 | ||
|  |         self.trackCounts = [NSMutableDictionary dictionary];
 | ||
|  |     }
 | ||
|  |     return self;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | - (void)trackWithInstanceTag:(NSString *)instanceName event:(TDAutoTrackEvent *)event params:(NSDictionary *)params {
 | ||
|  |     if ([self canTrackWithInstanceToken:instanceName]) {
 | ||
|  |         ThinkingAnalyticsSDK *instance = [ThinkingAnalyticsSDK instanceWithAppid:instanceName];
 | ||
|  | #ifdef DEBUG
 | ||
|  |         if (!instance) {
 | ||
|  |             @throw [NSException exceptionWithName:@"Thinkingdata Exception" reason:[NSString stringWithFormat:@"check this thinking instance, instanceTag: %@", instanceName] userInfo:nil];
 | ||
|  |         }
 | ||
|  | #endif
 | ||
|  |         [instance autoTrackWithEvent:event properties:params];
 | ||
|  |                 
 | ||
|  |         if (self.autoFlush) [instance innerFlush];
 | ||
|  |         
 | ||
|  |         if ([[self class] isEqual:NSClassFromString(@"TDInstallTracker")]) {
 | ||
|  |             [TDNotificationManager postAnalyticsAppInstallEventWithAppId:instanceName];
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | }
 | ||
|  | 
 | ||
|  | - (BOOL)canTrackWithInstanceToken:(NSString *)token {
 | ||
|  |     
 | ||
|  |     if (!self.additionalCondition) {
 | ||
|  |         return NO;
 | ||
|  |     }
 | ||
|  |     
 | ||
|  |     NSInteger trackCount = [self.trackCounts[token] integerValue];
 | ||
|  |     
 | ||
|  |     if (self.isOneTime && trackCount >= 1) {
 | ||
|  |         return NO;
 | ||
|  |     }
 | ||
|  |     
 | ||
|  |     if (self.isOneTime) {
 | ||
|  |         trackCount++;
 | ||
|  |         self.trackCounts[token] = @(trackCount);
 | ||
|  |     }
 | ||
|  |     
 | ||
|  |     return YES;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | @end
 |