@@ -42,6 +42,7 @@ @interface AIActivityHandler()
4242@property (nonatomic , copy ) NSString *userAgent;
4343@property (nonatomic , copy ) NSString *clientSdk;
4444@property (nonatomic , assign ) BOOL trackingEnabled;
45+ @property (nonatomic , assign ) BOOL internalEnabled;
4546
4647@end
4748
@@ -70,6 +71,7 @@ - (id)initWithAppToken:(NSString *)yourAppToken {
7071 // default values
7172 self.environment = @" unknown" ;
7273 self.trackMacMd5 = YES ;
74+ self.internalEnabled = YES ;
7375
7476 dispatch_async (self.internalQueue , ^{
7577 [self initInternal: yourAppToken];
@@ -119,6 +121,26 @@ - (void)finishedTrackingWithResponse:(AIResponseData *)response {
119121 }
120122}
121123
124+ - (void )setEnabled : (BOOL )enabled {
125+ self.internalEnabled = enabled;
126+ if ([self checkActivityState: self .activityState]) {
127+ self.activityState .enabled = enabled;
128+ }
129+ if (enabled) {
130+ [self trackSubsessionStart ];
131+ } else {
132+ [self trackSubsessionEnd ];
133+ }
134+ }
135+
136+ - (BOOL )isEnabled {
137+ if ([self checkActivityState: self .activityState]) {
138+ return self.activityState .enabled ;
139+ } else {
140+ return self.internalEnabled ;
141+ }
142+ }
143+
122144#pragma mark - internal
123145- (void )initInternal : (NSString *)yourAppToken {
124146 if (![self checkAppTokenNotNil: yourAppToken]) return ;
@@ -144,6 +166,11 @@ - (void)initInternal:(NSString *)yourAppToken {
144166- (void )startInternal {
145167 if (![self checkAppTokenNotNil: self .appToken]) return ;
146168
169+ if (self.activityState != nil
170+ && !self.activityState .enabled ) {
171+ return ;
172+ }
173+
147174 [self .packageHandler resumeSending ];
148175 [self startTimer ];
149176
@@ -157,6 +184,7 @@ - (void)startInternal {
157184
158185 [self transferSessionPackage ];
159186 [self .activityState resetSessionAttributes: now];
187+ self.activityState .enabled = self.internalEnabled ;
160188 [self writeActivityState ];
161189 [self .logger info: @" First session" ];
162190 return ;
@@ -200,7 +228,8 @@ - (void)endInternal {
200228
201229 [self .packageHandler pauseSending ];
202230 [self stopTimer ];
203- [self updateActivityState ];
231+ double now = [NSDate .date timeIntervalSince1970 ];
232+ [self updateActivityState: now];
204233 [self writeActivityState ];
205234}
206235
@@ -212,12 +241,16 @@ - (void)eventInternal:(NSString *)eventToken
212241 if (![self checkEventTokenNotNil: eventToken]) return ;
213242 if (![self checkEventTokenLength: eventToken]) return ;
214243
244+ if (!self.activityState .enabled ) {
245+ return ;
246+ }
247+
215248 AIPackageBuilder *eventBuilder = [[AIPackageBuilder alloc ] init ];
216249 eventBuilder.eventToken = eventToken;
217250 eventBuilder.callbackParameters = parameters;
218251
219252 double now = [NSDate .date timeIntervalSince1970 ];
220- [self updateActivityState ];
253+ [self updateActivityState: now ];
221254 self.activityState .createdAt = now;
222255 self.activityState .eventCount ++;
223256
@@ -247,13 +280,17 @@ - (void)revenueInternal:(double)amount
247280 if (![self checkEventTokenLength: eventToken]) return ;
248281 if (![self checkTransactionId: transactionId]) return ;
249282
283+ if (!self.activityState .enabled ) {
284+ return ;
285+ }
286+
250287 AIPackageBuilder *revenueBuilder = [[AIPackageBuilder alloc ] init ];
251288 revenueBuilder.amountInCents = amount;
252289 revenueBuilder.eventToken = eventToken;
253290 revenueBuilder.callbackParameters = parameters;
254291
255292 double now = [NSDate .date timeIntervalSince1970 ];
256- [self updateActivityState ];
293+ [self updateActivityState: now ];
257294 self.activityState .createdAt = now;
258295 self.activityState .eventCount ++;
259296
@@ -275,10 +312,9 @@ - (void)revenueInternal:(double)amount
275312#pragma mark - private
276313
277314// returns whether or not the activity state should be written
278- - (BOOL )updateActivityState {
315+ - (BOOL )updateActivityState : ( double ) now {
279316 if (![self checkActivityState: self .activityState]) return NO ;
280317
281- double now = [NSDate .date timeIntervalSince1970 ];
282318 double lastInterval = now - self.activityState .lastActivity ;
283319 if (lastInterval < 0 ) {
284320 [self .logger error: @" Time travel!" ];
@@ -375,8 +411,13 @@ - (void)stopTimer {
375411}
376412
377413- (void )timerFired {
414+ if (self.activityState != nil
415+ && !self.activityState .enabled ) {
416+ return ;
417+ }
378418 [self .packageHandler sendFirstPackage ];
379- if ([self updateActivityState ]) {
419+ double now = [NSDate .date timeIntervalSince1970 ];
420+ if ([self updateActivityState: now]) {
380421 [self writeActivityState ];
381422 }
382423}
0 commit comments