78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| //
 | |
| //  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
 |