Skip to content

Commit 1bb6f9b

Browse files
authored
Merge branch 'master' into SDK-2163
2 parents 911f3b5 + 6a43f49 commit 1bb6f9b

15 files changed

+179
-74
lines changed

Branch-TestBed/Branch-SDK-Tests/BNCAPIServerTest.m

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#import "BNCSystemObserver.h"
1212
#import "BNCConfig.h"
1313
#import "BranchConstants.h"
14+
#import "Branch.h"
1415

1516
@interface BNCAPIServerTest : XCTestCase
1617

@@ -370,4 +371,42 @@ - (void)testValidationServiceURL_EUTracking {
370371
XCTAssertTrue([url hasPrefix:expectedUrlPrefix]);
371372
}
372373

374+
- (void)testDefaultAPIURL {
375+
BNCServerAPI *serverAPI = [BNCServerAPI new];
376+
XCTAssertNil(serverAPI.customAPIURL);
377+
378+
NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL];
379+
NSString *expectedUrl = [BNC_API_URL stringByAppendingString: @"/v1/install"];
380+
XCTAssertEqualObjects(storedUrl, expectedUrl);
381+
}
382+
383+
- (void)testSetAPIURL_Example {
384+
NSString *url = @"https://www.example.com";
385+
[Branch setAPIUrl:url];
386+
387+
NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL];
388+
NSString *expectedUrl = [url stringByAppendingString: @"/v1/install"];
389+
XCTAssertEqualObjects(storedUrl, expectedUrl);
390+
391+
[Branch setAPIUrl:BNC_API_URL];
392+
}
393+
394+
- (void)testSetAPIURL_InvalidHttp {
395+
NSString *url = @"Invalid://www.example.com";
396+
[Branch setAPIUrl:url];
397+
398+
NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL];
399+
NSString *expectedUrl = [BNC_API_URL stringByAppendingString: @"/v1/install"];
400+
XCTAssertEqualObjects(storedUrl, expectedUrl);
401+
}
402+
403+
- (void)testSetAPIURL_InvalidEmpty {
404+
NSString *url = @"";
405+
[Branch setAPIUrl:url];
406+
407+
NSString *storedUrl = [[BNCServerAPI sharedInstance] installServiceURL];
408+
NSString *expectedUrl = [BNC_API_URL stringByAppendingString: @"/v1/install"];
409+
XCTAssertEqualObjects(storedUrl, expectedUrl);
410+
}
411+
373412
@end

Branch-TestBed/Branch-SDK-Tests/BNCPreferenceHelperTests.m

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -199,34 +199,6 @@ - (void)testURLSkipList {
199199
XCTAssert([filterDesc isEqualToString:valueDesc]);
200200
}
201201

202-
- (void)testSetAPIURL_Example {
203-
204-
NSString *url = @"https://www.example.com/";
205-
[self.prefHelper setBranchAPIURL:url] ;
206-
207-
NSString *urlStored = self.prefHelper.branchAPIURL ;
208-
XCTAssert([url isEqualToString:urlStored]);
209-
}
210-
211-
- (void)testSetAPIURL_InvalidHttp {
212-
213-
NSString *url = @"Invalid://www.example.com/";
214-
[self.prefHelper setBranchAPIURL:url] ;
215-
216-
NSString *urlStored = self.prefHelper.branchAPIURL ;
217-
XCTAssert(![url isEqualToString:urlStored]);
218-
XCTAssert([urlStored isEqualToString:BNC_API_URL]);
219-
}
220-
221-
- (void)testSetAPIURL_InvalidEmpty {
222-
223-
[self.prefHelper setBranchAPIURL:@""] ;
224-
225-
NSString *urlStored = self.prefHelper.branchAPIURL ;
226-
XCTAssert(![urlStored isEqualToString:@""]);
227-
XCTAssert([urlStored isEqualToString:BNC_API_URL]);
228-
}
229-
230202
- (void)testSetCDNBaseURL_Example {
231203

232204
NSString *url = @"https://www.example.com/";

Branch-TestBed/Branch-SDK-Tests/BranchClassTests.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,15 @@ - (void)testGetLongURLWithParamsAndChannelAndTagsAndFeatureAndStageAndAlias {
220220
XCTAssertEqualObjects(generatedURL, expectedURL, @"URL should match the expected format");
221221
}
222222

223+
- (void)testSetDMAParamsForEEA {
224+
225+
XCTAssertFalse([[BNCPreferenceHelper sharedInstance] eeaRegionInitialized]);
226+
[Branch setDMAParamsForEEA:FALSE AdPersonalizationConsent:TRUE AdUserDataUsageConsent:TRUE];
227+
XCTAssertTrue([[BNCPreferenceHelper sharedInstance] eeaRegionInitialized]);
228+
XCTAssertFalse([BNCPreferenceHelper sharedInstance].eeaRegion);
229+
XCTAssertTrue([BNCPreferenceHelper sharedInstance].adPersonalizationConsent);
230+
XCTAssertTrue([BNCPreferenceHelper sharedInstance].adUserDataUsageConsent);
231+
232+
}
233+
223234
@end

Branch-TestBed/Branch-TestBed/AppDelegate.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ - (BOOL)application:(UIApplication *)application
3131

3232
// Branch.useTestBranchKey = YES; // Make sure to comment this line out for production apps!!!
3333
Branch *branch = [Branch getInstance];
34-
34+
35+
// Change the Branch base API URL
36+
//[Branch setAPIUrl:@"https://api3.branch.io"];
37+
3538
// test pre init support
3639
//[self testDispatchToIsolationQueue:branch]
3740
[branch enableLoggingAtLevel:BranchLogLevelVerbose withCallback:^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) {

BranchSDK/BNCPreferenceHelper.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
5151
@property (copy, nonatomic) NSString *lastSystemBuildVersion;
5252
@property (copy, nonatomic) NSString *browserUserAgentString;
5353
@property (copy, nonatomic) NSString *referringURL;
54-
@property (copy, nonatomic) NSString *branchAPIURL;
5554
@property (assign, nonatomic) BOOL limitFacebookTracking;
5655
@property (strong, nonatomic) NSDate *previousAppBuildDate;
5756
@property (assign, nonatomic, readwrite) BOOL disableAdNetworkCallouts;
@@ -73,11 +72,14 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
7372
@property (strong, nonatomic) NSDate *firstAppLaunchTime;
7473
@property (assign, nonatomic) BOOL invokeRegisterApp;
7574

75+
@property (assign, nonatomic) BOOL eeaRegion;
76+
@property (assign, nonatomic) BOOL adPersonalizationConsent;
77+
@property (assign, nonatomic) BOOL adUserDataUsageConsent;
78+
7679
- (void) clearTrackingInformation;
7780

7881
+ (BNCPreferenceHelper *)sharedInstance;
7982

80-
- (void)setBranchAPIURL:(NSString *)url;
8183
- (void)setPatternListURL:(NSString *)url;
8284

8385
- (void)setRequestMetadataKey:(NSString *)key value:(NSObject *)value;
@@ -97,5 +99,6 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
9799
- (NSMutableString*) sanitizedMutableBaseURL:(NSString*)baseUrl;
98100
- (void) synchronize; // Flushes preference queue to persistence.
99101
+ (void) clearAll;
102+
- (BOOL) eeaRegionInitialized;
100103

101104
@end

BranchSDK/BNCPreferenceHelper.m

Lines changed: 62 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
static NSString * const BRANCH_PREFS_KEY_LAST_RUN_BRANCH_KEY = @"bnc_last_run_branch_key";
2727
static NSString * const BRANCH_PREFS_KEY_LAST_STRONG_MATCH_DATE = @"bnc_strong_match_created_date";
2828

29-
static NSString * const BRANCH_PREFS_KEY_API_URL = @"bnc_api_url";
3029
static NSString * const BRANCH_PREFS_KEY_PATTERN_LIST_URL = @"bnc_pattern_list_url";
3130

3231
static NSString * const BRANCH_PREFS_KEY_RANDOMIZED_DEVICE_TOKEN = @"bnc_randomized_device_token";
@@ -61,14 +60,17 @@
6160

6261
static NSString * const BRANCH_PREFS_KEY_LOG_IAP_AS_EVENTS = @"bnc_log_iap_as_events";
6362

63+
static NSString * const BRANCH_PREFS_KEY_DMA_EEA = @"bnc_dma_eea";
64+
static NSString * const BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION = @"bnc_dma_ad_personalization";
65+
static NSString * const BRANCH_PREFS_KEY_DMA_AD_USER_DATA = @"bnc_dma_ad_user_data";
66+
6467

6568
NSURL* /* _Nonnull */ BNCURLForBranchDirectory_Unthreaded(void);
6669

6770
@interface BNCPreferenceHelper () {
6871
NSOperationQueue *_persistPrefsQueue;
6972
NSString *_lastSystemBuildVersion;
7073
NSString *_browserUserAgentString;
71-
NSString *_branchAPIURL;
7274
NSString *_referringURL;
7375
}
7476

@@ -114,7 +116,10 @@ @implementation BNCPreferenceHelper
114116
highestConversionValueSent = _highestConversionValueSent,
115117
referringURLQueryParameters = _referringURLQueryParameters,
116118
anonID = _anonID,
117-
patternListURL = _patternListURL;
119+
patternListURL = _patternListURL,
120+
eeaRegion = _eeaRegion,
121+
adPersonalizationConsent = _adPersonalizationConsent,
122+
adUserDataUsageConsent = _adUserDataUsageConsent;
118123

119124
+ (BNCPreferenceHelper *)sharedInstance {
120125
static BNCPreferenceHelper *preferenceHelper;
@@ -156,34 +161,6 @@ - (void) dealloc {
156161

157162
#pragma mark - API methods
158163

159-
- (void)setBranchAPIURL:(NSString *)url {
160-
if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"] ){
161-
@synchronized (self) {
162-
_branchAPIURL = [url copy];
163-
[self writeObjectToDefaults:BRANCH_PREFS_KEY_API_URL value:_branchAPIURL];
164-
}
165-
} else {
166-
[[BranchLogger shared] logWarning:@"Ignoring invalid custom API URL"];
167-
}
168-
}
169-
170-
// TODO: This method is not used with the Tracking domain change. See SDK-2118
171-
- (NSString *)branchAPIURL {
172-
@synchronized (self) {
173-
if (!_branchAPIURL) {
174-
_branchAPIURL = [self readStringFromDefaults:BRANCH_PREFS_KEY_API_URL];
175-
}
176-
177-
// return the default URL in the event there's nothing in storage
178-
if (_branchAPIURL == nil || [_branchAPIURL isEqualToString:@""]) {
179-
_branchAPIURL = [BNC_API_URL copy];
180-
[self writeObjectToDefaults:BRANCH_PREFS_KEY_API_URL value:_branchAPIURL];
181-
}
182-
183-
return _branchAPIURL;
184-
}
185-
}
186-
187164
- (void)setPatternListURL:(NSString *)url {
188165
if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"] ){
189166
@synchronized (self) {
@@ -791,6 +768,60 @@ - (void) setInvokeRegisterApp:(BOOL)invoke {
791768
}
792769
}
793770

771+
- (BOOL) eeaRegionInitialized {
772+
@synchronized(self) {
773+
if([self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_EEA])
774+
return YES;
775+
return NO;
776+
}
777+
}
778+
779+
- (BOOL) eeaRegion {
780+
@synchronized(self) {
781+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_EEA];
782+
if ([b isKindOfClass:NSNumber.class]) return [b boolValue];
783+
return NO;
784+
}
785+
}
786+
787+
- (void) setEeaRegion:(BOOL)isEEARegion {
788+
@synchronized(self) {
789+
NSNumber *b = [NSNumber numberWithBool:isEEARegion];
790+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_EEA value:b];
791+
}
792+
}
793+
794+
- (BOOL) adPersonalizationConsent {
795+
@synchronized(self) {
796+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION];
797+
if ([b isKindOfClass:NSNumber.class]) return [b boolValue];
798+
return NO;
799+
}
800+
}
801+
802+
- (void) setAdPersonalizationConsent:(BOOL)hasConsent {
803+
@synchronized(self) {
804+
NSNumber *b = [NSNumber numberWithBool:hasConsent];
805+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION value:b];
806+
}
807+
}
808+
809+
- (BOOL) adUserDataUsageConsent {
810+
@synchronized(self) {
811+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_AD_USER_DATA];
812+
if ([b isKindOfClass:NSNumber.class]) return [b boolValue];
813+
return NO;
814+
}
815+
}
816+
817+
- (void) setAdUserDataUsageConsent:(BOOL)hasConsent {
818+
@synchronized(self) {
819+
NSNumber *b = [NSNumber numberWithBool:hasConsent];
820+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_AD_USER_DATA value:b];
821+
}
822+
}
823+
824+
794825
- (void) clearTrackingInformation {
795826
@synchronized(self) {
796827
/*

BranchSDK/BNCRequestFactory.m

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ - (NSDictionary *)dataForInstall {
110110
// TODO: refactor to simply request values for install
111111
[self addReferringURLsToJSON:json forEndpoint:@"/v1/install"];
112112

113+
// Add DMA Compliance Params for Google
114+
[self addDMAConsentParamsToJSON:json];
115+
113116
return json;
114117
}
115118

@@ -150,6 +153,9 @@ - (NSDictionary *)dataForOpen {
150153
// TODO: refactor to simply request values for open
151154
[self addReferringURLsToJSON:json forEndpoint:@"/v1/open"];
152155

156+
// Add DMA Compliance Params for Google
157+
[self addDMAConsentParamsToJSON:json];
158+
153159
return json;
154160
}
155161

@@ -181,6 +187,7 @@ - (NSDictionary *)dataForEventWithEventDictionary:(NSMutableDictionary *)diction
181187
// TODO: refactor to simply request values for event
182188
[self addReferringURLsToJSON:json forEndpoint:@"/v2/event"];
183189

190+
184191
return json;
185192
}
186193

@@ -319,6 +326,16 @@ - (void)addPartnerParametersToJSON:(NSMutableDictionary *)json {
319326
}
320327
}
321328

329+
- (void)addDMAConsentParamsToJSON:(NSMutableDictionary *)json {
330+
331+
if([self.preferenceHelper eeaRegionInitialized]){
332+
[self safeSetValue:@([self.preferenceHelper eeaRegion]) forKey:BRANCH_REQUEST_KEY_DMA_EEA onDict:json];
333+
[self safeSetValue:@([self.preferenceHelper adPersonalizationConsent]) forKey:BRANCH_REQUEST_KEY_DMA_AD_PEROSALIZATION onDict:json];
334+
[self safeSetValue:@([self.preferenceHelper adUserDataUsageConsent]) forKey:BRANCH_REQUEST_KEY_DMA_AD_USER_DATA onDict:json];
335+
}
336+
}
337+
338+
322339
- (void)addLocalURLToInstallJSON:(NSMutableDictionary *)json {
323340
if ([BNCPasteboard sharedInstance].checkOnInstall) {
324341
NSURL *pasteboardURL = nil;
@@ -523,6 +540,9 @@ - (NSDictionary *)v2dictionary {
523540
dictionary[@"sdk"] = @"ios";
524541
}
525542

543+
// Add DMA Compliance Params for Google
544+
[self addDMAConsentParamsToJSON:dictionary];
545+
526546
return dictionary;
527547
}
528548

BranchSDK/BNCServerAPI.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN
3333
// Used to enable unit tests without regard for ATT authorization status
3434
@property (nonatomic, assign, readwrite) BOOL automaticallyEnableTrackingDomain;
3535

36+
@property (nonatomic, copy, readwrite, nullable) NSString *customAPIURL;
37+
3638
@end
3739

3840
NS_ASSUME_NONNULL_END

BranchSDK/BNCServerAPI.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import "BNCSystemObserver.h"
1010
#import "BNCConfig.h"
1111
#import "BranchConstants.h"
12+
#import "BNCPreferenceHelper.h"
1213

1314
@implementation BNCServerAPI
1415

@@ -29,6 +30,7 @@ - (instancetype)init {
2930
self.useTrackingDomain = NO;
3031
self.useEUServers = NO;
3132
self.automaticallyEnableTrackingDomain = YES;
33+
self.customAPIURL = nil;
3234
}
3335
return self;
3436
}
@@ -77,6 +79,10 @@ - (BOOL)optedIntoIDFA {
7779

7880
// Linking endpoints are not used for Ads tracking
7981
- (NSString *)getBaseURLForLinkingEndpoints {
82+
if (self.customAPIURL) {
83+
return self.customAPIURL;
84+
}
85+
8086
NSString * urlString;
8187
if (self.useEUServers){
8288
urlString = BNC_EU_API_URL;
@@ -88,6 +94,11 @@ - (NSString *)getBaseURLForLinkingEndpoints {
8894
}
8995

9096
- (NSString *)getBaseURL {
97+
//Check if user has set a custom API base URL
98+
if (self.customAPIURL) {
99+
return self.customAPIURL;
100+
}
101+
91102
if (self.automaticallyEnableTrackingDomain) {
92103
self.useTrackingDomain = [self optedIntoIDFA];
93104
}

BranchSDK/Branch.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,16 @@ extern NSString * __nonnull const BNCSpotlightFeature;
824824
*/
825825
+ (void) setReferrerGbraidValidityWindow:(NSTimeInterval) validityWindow;
826826

827+
/*
828+
829+
Sets the value of parameters required by Google Conversion APIs for DMA Compliance in EEA region.
830+
831+
@param eeaRegion -(BOOL) If European regulations, including the DMA, apply to this user and conversion.
832+
@param adPersonalizationConsent - (BOOL) If End user has granted/denied ads personalization consent.
833+
@param adUserDataUsageConsent - (BOOL) If User has granted/denied consent for 3P transmission of user level data for ads
834+
*/
835+
+ (void) setDMAParamsForEEA:(BOOL) eeaRegion AdPersonalizationConsent:(BOOL) adPersonalizationConsent AdUserDataUsageConsent:(BOOL) adUserDataUsageConsent;
836+
827837
#pragma mark - Session Item methods
828838

829839
///--------------------

0 commit comments

Comments
 (0)