1313#import " BNCLog.h"
1414#import " BNCFabricAnswers.h"
1515#import " BranchConstants.h"
16+ #import " NSString+Branch.h"
1617
1718static const NSTimeInterval DEFAULT_TIMEOUT = 5.5 ;
1819static const NSTimeInterval DEFAULT_RETRY_INTERVAL = 0 ;
@@ -173,7 +174,6 @@ - (NSString *)lastRunBranchKey {
173174 if (!_lastRunBranchKey) {
174175 _lastRunBranchKey = [self readStringFromDefaults: BRANCH_PREFS_KEY_LAST_RUN_BRANCH_KEY];
175176 }
176-
177177 return _lastRunBranchKey;
178178}
179179
@@ -188,12 +188,11 @@ - (NSDate *)lastStrongMatchDate {
188188 if (!_lastStrongMatchDate) {
189189 _lastStrongMatchDate = (NSDate *)[self readObjectFromDefaults: BRANCH_PREFS_KEY_LAST_STRONG_MATCH_DATE];
190190 }
191-
192191 return _lastStrongMatchDate;
193192}
194193
195194- (void )setLastStrongMatchDate : (NSDate *)lastStrongMatchDate {
196- if (![_lastStrongMatchDate isEqualToDate: lastStrongMatchDate]) {
195+ if (lastStrongMatchDate == nil || ![_lastStrongMatchDate isEqualToDate: lastStrongMatchDate]) {
197196 _lastStrongMatchDate = lastStrongMatchDate;
198197 [self writeObjectToDefaults: BRANCH_PREFS_KEY_LAST_STRONG_MATCH_DATE value: lastStrongMatchDate];
199198 }
@@ -203,7 +202,6 @@ - (NSString *)appVersion {
203202 if (!_appVersion) {
204203 _appVersion = [self readStringFromDefaults: BRANCH_PREFS_KEY_APP_VERSION];
205204 }
206-
207205 return _appVersion;
208206}
209207
@@ -223,7 +221,7 @@ - (NSString *)deviceFingerprintID {
223221}
224222
225223- (void )setDeviceFingerprintID : (NSString *)deviceFingerprintID {
226- if (![_deviceFingerprintID isEqualToString: deviceFingerprintID]) {
224+ if (deviceFingerprintID == nil || ![_deviceFingerprintID isEqualToString: deviceFingerprintID]) {
227225 _deviceFingerprintID = deviceFingerprintID;
228226 [self writeObjectToDefaults: BRANCH_PREFS_KEY_DEVICE_FINGERPRINT_ID value: deviceFingerprintID];
229227 }
@@ -238,70 +236,42 @@ - (NSString *)sessionID {
238236}
239237
240238- (void )setSessionID : (NSString *)sessionID {
241- if (![_sessionID isEqualToString: sessionID]) {
239+ if (sessionID == nil || ![_sessionID isEqualToString: sessionID]) {
242240 _sessionID = sessionID;
243241 [self writeObjectToDefaults: BRANCH_PREFS_KEY_SESSION_ID value: sessionID];
244242 }
245243}
246244
247245- (NSString *)identityID {
248- if (!_identityID) {
249- _identityID = [self readStringFromDefaults: BRANCH_PREFS_KEY_IDENTITY_ID];
250- }
251-
252- return _identityID;
246+ return [self readStringFromDefaults: BRANCH_PREFS_KEY_IDENTITY_ID];
253247}
254248
255249- (void )setIdentityID : (NSString *)identityID {
256- if (![_identityID isEqualToString: identityID]) {
257- _identityID = identityID;
258- [self writeObjectToDefaults: BRANCH_PREFS_KEY_IDENTITY_ID value: identityID];
259- }
250+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_IDENTITY_ID value: identityID];
260251}
261252
262253- (NSString *)userIdentity {
263- if (!_userIdentity) {
264- _userIdentity = [self readStringFromDefaults: BRANCH_PREFS_KEY_IDENTITY];
265- }
266-
267- return _userIdentity;
254+ return [self readStringFromDefaults: BRANCH_PREFS_KEY_IDENTITY];
268255}
269256
270257- (void )setUserIdentity : (NSString *)userIdentity {
271- if (![_userIdentity isEqualToString: userIdentity]) {
272- _userIdentity = userIdentity;
273- [self writeObjectToDefaults: BRANCH_PREFS_KEY_IDENTITY value: userIdentity];
274- }
258+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_IDENTITY value: userIdentity];
275259}
276260
277261- (NSString *)linkClickIdentifier {
278- if (!_linkClickIdentifier) {
279- _linkClickIdentifier = [self readStringFromDefaults: BRANCH_PREFS_KEY_LINK_CLICK_IDENTIFIER];
280- }
281-
282- return _linkClickIdentifier;
262+ return [self readStringFromDefaults: BRANCH_PREFS_KEY_LINK_CLICK_IDENTIFIER];
283263}
284264
285265- (void )setLinkClickIdentifier : (NSString *)linkClickIdentifier {
286- if (![_linkClickIdentifier isEqualToString: linkClickIdentifier]) {
287- _linkClickIdentifier = linkClickIdentifier;
288- [self writeObjectToDefaults: BRANCH_PREFS_KEY_LINK_CLICK_IDENTIFIER value: linkClickIdentifier];
289- }
266+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_LINK_CLICK_IDENTIFIER value: linkClickIdentifier];
290267}
291268
292269- (NSString *)spotlightIdentifier {
293- if (!_spotlightIdentifier) {
294- _spotlightIdentifier = [self readStringFromDefaults: BRANCH_PREFS_KEY_SPOTLIGHT_IDENTIFIER];
295- }
296-
297- return _spotlightIdentifier;
270+ return [self readStringFromDefaults: BRANCH_PREFS_KEY_SPOTLIGHT_IDENTIFIER];
298271}
299272
300273- (void )setSpotlightIdentifier : (NSString *)spotlightIdentifier {
301- if (![_spotlightIdentifier isEqualToString: spotlightIdentifier]) {
302- _spotlightIdentifier = spotlightIdentifier;
303- [self writeObjectToDefaults: BRANCH_PREFS_KEY_SPOTLIGHT_IDENTIFIER value: spotlightIdentifier];
304- }
274+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_SPOTLIGHT_IDENTIFIER value: spotlightIdentifier];
305275}
306276
307277- (NSString *)externalIntentURI {
@@ -315,7 +285,7 @@ - (NSString *)externalIntentURI {
315285
316286- (void )setExternalIntentURI : (NSString *)externalIntentURI {
317287 @synchronized (self) {
318- if (![_externalIntentURI isEqualToString: externalIntentURI]) {
288+ if (externalIntentURI == nil || ![_externalIntentURI isEqualToString: externalIntentURI]) {
319289 _externalIntentURI = externalIntentURI;
320290 [self writeObjectToDefaults: BRANCH_REQUEST_KEY_EXTERNAL_INTENT_URI value: externalIntentURI];
321291 }
@@ -337,21 +307,11 @@ - (void) setReferringURL:(NSString *)referringURL {
337307}
338308
339309- (NSString *)universalLinkUrl {
340- @synchronized (self) {
341- if (!_universalLinkUrl) {
342- _universalLinkUrl = [self readStringFromDefaults: BRANCH_PREFS_KEY_UNIVERSAL_LINK_URL];
343- }
344- return _universalLinkUrl;
345- }
310+ return [self readStringFromDefaults: BRANCH_PREFS_KEY_UNIVERSAL_LINK_URL];
346311}
347312
348313- (void )setUniversalLinkUrl : (NSString *)universalLinkUrl {
349- @synchronized (self) {
350- if (![_universalLinkUrl isEqualToString: universalLinkUrl]) {
351- _universalLinkUrl = universalLinkUrl;
352- [self writeObjectToDefaults: BRANCH_PREFS_KEY_UNIVERSAL_LINK_URL value: universalLinkUrl];
353- }
354- }
314+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_UNIVERSAL_LINK_URL value: universalLinkUrl];
355315}
356316
357317- (NSString *)sessionParams {
@@ -365,37 +325,39 @@ - (NSString *)sessionParams {
365325
366326- (void )setSessionParams : (NSString *)sessionParams {
367327 @synchronized (self) {
368- if (![_sessionParams isEqualToString: sessionParams]) {
328+ if (sessionParams == nil || ![_sessionParams isEqualToString: sessionParams]) {
369329 _sessionParams = sessionParams;
370330 [self writeObjectToDefaults: BRANCH_PREFS_KEY_SESSION_PARAMS value: sessionParams];
371331 }
372332 }
373333}
374334
375335- (NSString *)installParams {
376- if (!_installParams) {
377- id installParamsFromCache = [self readStringFromDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS];
378- if ([installParamsFromCache isKindOfClass: [NSString class ]]) {
379- _installParams = [self readStringFromDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS];
380- }
381- else if ([installParamsFromCache isKindOfClass: [NSDictionary class ]]) {
382- [self writeObjectToDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS value: nil ];
336+ @synchronized (self) {
337+ if (!_installParams) {
338+ id installParamsFromCache = [self readStringFromDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS];
339+ if ([installParamsFromCache isKindOfClass: [NSString class ]]) {
340+ _installParams = [self readStringFromDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS];
341+ }
342+ else if ([installParamsFromCache isKindOfClass: [NSDictionary class ]]) {
343+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS value: nil ];
344+ }
383345 }
346+ return _installParams;
384347 }
385-
386- return _installParams;
387348}
388349
389350- (void )setInstallParams : (NSString *)installParams {
390- if ([installParams isKindOfClass: [NSDictionary class ]]) {
391- _installParams = [BNCEncodingUtils encodeDictionaryToJsonString: (NSDictionary *)installParams];
392- [self writeObjectToDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS value: _installParams];
393- return ;
394- }
395-
396- if (![_installParams isEqualToString: installParams]) {
397- _installParams = installParams;
398- [self writeObjectToDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS value: installParams];
351+ @synchronized (self) {
352+ if ([installParams isKindOfClass: [NSDictionary class ]]) {
353+ _installParams = [BNCEncodingUtils encodeDictionaryToJsonString: (NSDictionary *)installParams];
354+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS value: _installParams];
355+ return ;
356+ }
357+ if (installParams == nil || ![_installParams isEqualToString: installParams]) {
358+ _installParams = installParams;
359+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_INSTALL_PARAMS value: installParams];
360+ }
399361 }
400362}
401363
@@ -464,6 +426,24 @@ - (void)setUserUrl:(NSString *)userUrl {
464426 }
465427}
466428
429+ - (NSMutableString *) sanitizedMutableBaseURL : (NSString *)baseUrl_ {
430+ NSMutableString *baseUrl = [baseUrl_ mutableCopy ];
431+ if (self.trackingDisabled ) {
432+ NSString *id_string = [NSString stringWithFormat: @" %% 24identity_id=%@ " , self .identityID];
433+ NSRange range = [baseUrl rangeOfString: id_string];
434+ if (range.location != NSNotFound ) [baseUrl replaceCharactersInRange: range withString: @" " ];
435+ } else
436+ if ([baseUrl hasSuffix: @" &" ] || [baseUrl hasSuffix: @" ?" ]) {
437+ } else
438+ if ([baseUrl bnc_containsString: @" ?" ]) {
439+ [baseUrl appendString: @" &" ];
440+ }
441+ else {
442+ [baseUrl appendString: @" ?" ];
443+ }
444+ return baseUrl;
445+ }
446+
467447- (BOOL )checkedAppleSearchAdAttribution {
468448 _checkedAppleSearchAdAttribution = [self readBoolFromDefaults: BRANCH_PREFS_KEY_CHECKED_APPLE_SEARCH_ADS];
469449 return _checkedAppleSearchAdAttribution;
@@ -591,6 +571,47 @@ - (void) setURLBlackListVersion:(NSInteger)URLBlackListVersion {
591571 }
592572}
593573
574+ - (BOOL ) trackingDisabled {
575+ @synchronized (self) {
576+ NSNumber *b = (id ) [self readObjectFromDefaults: @" trackingDisabled" ];
577+ if ([b isKindOfClass: NSNumber .class]) return [b boolValue ];
578+ return false ;
579+ }
580+ }
581+
582+ - (void ) setTrackingDisabled : (BOOL )disabled {
583+ @synchronized (self) {
584+ NSNumber *b = [NSNumber numberWithBool: disabled];
585+ [self writeObjectToDefaults: @" trackingDisabled" value: b];
586+ if (disabled) [self clearTrackingInformation ];
587+ }
588+ }
589+
590+ - (void ) clearTrackingInformation {
591+ @synchronized (self) {
592+ /* Don't clear these:
593+ self.deviceFingerprintID = nil;
594+ self.userIdentity = nil;
595+ self.identityID = nil;
596+ self.installParams = nil;
597+ */
598+ self.sessionID = nil ;
599+ self.linkClickIdentifier = nil ;
600+ self.spotlightIdentifier = nil ;
601+ self.referringURL = nil ;
602+ self.universalLinkUrl = nil ;
603+ self.installParams = nil ;
604+ self.appleSearchAdDetails = nil ;
605+ self.appleSearchAdNeedsSend = NO ;
606+ self.sessionParams = nil ;
607+ self.externalIntentURI = nil ;
608+ self.savedAnalyticsData = nil ;
609+ self.previousAppBuildDate = nil ;
610+ self.requestMetadataDictionary = nil ;
611+ self.lastStrongMatchDate = nil ;
612+ }
613+ }
614+
594615#pragma mark - Credit Storage
595616
596617- (NSMutableDictionary *)creditsDictionary {
0 commit comments