Skip to content

Commit 8eb3280

Browse files
authored
(WIP) - SDK 2223 DMA Consent Params Implementation (#1345)
SDK-2223 Added API for setting DMA Compliance Params on Server Requests.
1 parent 18cc5aa commit 8eb3280

File tree

8 files changed

+123
-1
lines changed

8 files changed

+123
-1
lines changed

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

BranchSDK/BNCPreferenceHelper.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
7373
@property (strong, nonatomic) NSDate *firstAppLaunchTime;
7474
@property (assign, nonatomic) BOOL invokeRegisterApp;
7575

76+
@property (assign, nonatomic) BOOL eeaRegion;
77+
@property (assign, nonatomic) BOOL adPersonalizationConsent;
78+
@property (assign, nonatomic) BOOL adUserDataUsageConsent;
79+
7680
- (void) clearTrackingInformation;
7781

7882
+ (BNCPreferenceHelper *)sharedInstance;
@@ -97,5 +101,6 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
97101
- (NSMutableString*) sanitizedMutableBaseURL:(NSString*)baseUrl;
98102
- (void) synchronize; // Flushes preference queue to persistence.
99103
+ (void) clearAll;
104+
- (BOOL) eeaRegionInitialized;
100105

101106
@end

BranchSDK/BNCPreferenceHelper.m

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@
6161

6262
static NSString * const BRANCH_PREFS_KEY_LOG_IAP_AS_EVENTS = @"bnc_log_iap_as_events";
6363

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

6569
NSURL* /* _Nonnull */ BNCURLForBranchDirectory_Unthreaded(void);
6670

@@ -114,7 +118,10 @@ @implementation BNCPreferenceHelper
114118
highestConversionValueSent = _highestConversionValueSent,
115119
referringURLQueryParameters = _referringURLQueryParameters,
116120
anonID = _anonID,
117-
patternListURL = _patternListURL;
121+
patternListURL = _patternListURL,
122+
eeaRegion = _eeaRegion,
123+
adPersonalizationConsent = _adPersonalizationConsent,
124+
adUserDataUsageConsent = _adUserDataUsageConsent;
118125

119126
+ (BNCPreferenceHelper *)sharedInstance {
120127
static BNCPreferenceHelper *preferenceHelper;
@@ -791,6 +798,60 @@ - (void) setInvokeRegisterApp:(BOOL)invoke {
791798
}
792799
}
793800

801+
- (BOOL) eeaRegionInitialized {
802+
@synchronized(self) {
803+
if([self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_EEA])
804+
return YES;
805+
return NO;
806+
}
807+
}
808+
809+
- (BOOL) eeaRegion {
810+
@synchronized(self) {
811+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_EEA];
812+
if ([b isKindOfClass:NSNumber.class]) return [b boolValue];
813+
return NO;
814+
}
815+
}
816+
817+
- (void) setEeaRegion:(BOOL)isEEARegion {
818+
@synchronized(self) {
819+
NSNumber *b = [NSNumber numberWithBool:isEEARegion];
820+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_EEA value:b];
821+
}
822+
}
823+
824+
- (BOOL) adPersonalizationConsent {
825+
@synchronized(self) {
826+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION];
827+
if ([b isKindOfClass:NSNumber.class]) return [b boolValue];
828+
return NO;
829+
}
830+
}
831+
832+
- (void) setAdPersonalizationConsent:(BOOL)hasConsent {
833+
@synchronized(self) {
834+
NSNumber *b = [NSNumber numberWithBool:hasConsent];
835+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_AD_PERSONALIZATION value:b];
836+
}
837+
}
838+
839+
- (BOOL) adUserDataUsageConsent {
840+
@synchronized(self) {
841+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_DMA_AD_USER_DATA];
842+
if ([b isKindOfClass:NSNumber.class]) return [b boolValue];
843+
return NO;
844+
}
845+
}
846+
847+
- (void) setAdUserDataUsageConsent:(BOOL)hasConsent {
848+
@synchronized(self) {
849+
NSNumber *b = [NSNumber numberWithBool:hasConsent];
850+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_DMA_AD_USER_DATA value:b];
851+
}
852+
}
853+
854+
794855
- (void) clearTrackingInformation {
795856
@synchronized(self) {
796857
/*

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/Branch.h

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

837+
/*
838+
839+
Sets the value of parameters required by Google Conversion APIs for DMA Compliance in EEA region.
840+
841+
@param eeaRegion -(BOOL) If European regulations, including the DMA, apply to this user and conversion.
842+
@param adPersonalizationConsent - (BOOL) If End user has granted/denied ads personalization consent.
843+
@param adUserDataUsageConsent - (BOOL) If User has granted/denied consent for 3P transmission of user level data for ads
844+
*/
845+
+ (void) setDMAParamsForEEA:(BOOL) eeaRegion AdPersonalizationConsent:(BOOL) adPersonalizationConsent AdUserDataUsageConsent:(BOOL) adUserDataUsageConsent;
846+
837847
#pragma mark - Session Item methods
838848

839849
///--------------------

BranchSDK/Branch.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,12 @@ + (void)setReferrerGbraidValidityWindow:(NSTimeInterval)validityWindow{
540540
}
541541
}
542542

543+
+ (void) setDMAParamsForEEA:(BOOL)eeaRegion AdPersonalizationConsent:(BOOL)adPersonalizationConsent AdUserDataUsageConsent:(BOOL)adUserDataUsageConsent{
544+
[BNCPreferenceHelper sharedInstance].eeaRegion = eeaRegion;
545+
[BNCPreferenceHelper sharedInstance].adPersonalizationConsent = adPersonalizationConsent;
546+
[BNCPreferenceHelper sharedInstance].adUserDataUsageConsent = adUserDataUsageConsent;
547+
}
548+
543549
#pragma mark - InitSession Permutation methods
544550

545551
- (void)initSessionWithLaunchOptions:(NSDictionary *)options {

BranchSDK/BranchConstants.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,7 @@ extern NSString * const BRANCH_REQUEST_KEY_SKAN_POSTBACK_INDEX;
163163
extern NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_0;
164164
extern NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_1;
165165
extern NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_2;
166+
167+
extern NSString * const BRANCH_REQUEST_KEY_DMA_EEA;
168+
extern NSString * const BRANCH_REQUEST_KEY_DMA_AD_PEROSALIZATION;
169+
extern NSString * const BRANCH_REQUEST_KEY_DMA_AD_USER_DATA;

BranchSDK/BranchConstants.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,8 @@
161161
NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_0 = @"postback-sequence-index-0";
162162
NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_1 = @"postback-sequence-index-1";
163163
NSString * const BRANCH_REQUEST_KEY_VALUE_POSTBACK_SEQUENCE_INDEX_2 = @"postback-sequence-index-2";
164+
165+
NSString * const BRANCH_REQUEST_KEY_DMA_EEA = @"dma_eea";
166+
NSString * const BRANCH_REQUEST_KEY_DMA_AD_PEROSALIZATION = @"dma_ad_personalization";
167+
NSString * const BRANCH_REQUEST_KEY_DMA_AD_USER_DATA = @"dma_ad_user_data";
168+

0 commit comments

Comments
 (0)