Skip to content

Commit 552cdbd

Browse files
authored
Merge pull request #1216 from BranchMetrics/SDK-1437-snap-partner-parameters
SDK-1437 snap partner parameters
2 parents 94657d5 + 96cdbdf commit 552cdbd

File tree

5 files changed

+71
-15
lines changed

5 files changed

+71
-15
lines changed

Branch-SDK/BNCPartnerParameters.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ NS_ASSUME_NONNULL_BEGIN
1919

2020
// FB partner parameters, see FB documentation for details
2121
// Values that do not look like a valid SHA-256 hash are ignored
22-
- (void)addFaceBookParameterWithName:(NSString *)name value:(NSString *)value;
22+
- (void)addFacebookParameterWithName:(NSString *)name value:(NSString *)value;
23+
24+
// Snap partner parameters, see Snap documentation for details
25+
// Values that do not look like a valid SHA-256 hash are ignored
26+
- (void)addSnapParameterWithName:(NSString *)name value:(NSString *)value;
2327

2428
- (void)clearAllParameters;
2529

Branch-SDK/BNCPartnerParameters.m

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
#import "BNCPartnerParameters.h"
10+
#import "BNCLog.h"
1011

1112
@interface BNCPartnerParameters()
1213
@property (nonatomic, strong, readwrite) NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, NSString *> *> *parameters;
@@ -49,11 +50,19 @@ - (void)addParameterWithName:(NSString *)name value:(NSString *)value partnerNam
4950
[parametersForPartner setObject:value forKey:name];
5051
}
5152

52-
- (void)addFaceBookParameterWithName:(NSString *)name value:(NSString *)value {
53+
- (void)addFacebookParameterWithName:(NSString *)name value:(NSString *)value {
5354
if ([self sha256HashSanityCheckValue:value]) {
5455
[self addParameterWithName:name value:value partnerName:@"fb"];
5556
} else {
56-
// TODO: log a warning that the parameter looks invalid and will be ignored. Do not log the value as it may be PII that was inadvertently passed in.
57+
BNCLogWarning(@"Partner parameter does not appear to be SHA256 hashed. Dropping the parameter.");
58+
}
59+
}
60+
61+
- (void)addSnapParameterWithName:(NSString *)name value:(NSString *)value {
62+
if ([self sha256HashSanityCheckValue:value]) {
63+
[self addParameterWithName:name value:value partnerName:@"snap"];
64+
} else {
65+
BNCLogWarning(@"Partner parameter does not appear to be SHA256 hashed. Dropping the parameter.");
5766
}
5867
}
5968

Branch-SDK/Branch.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,14 @@ typedef NS_ENUM(NSUInteger, BranchCreditHistoryOrder) {
711711
*/
712712
- (void)addFacebookPartnerParameterWithName:(NSString *)name value:(NSString *)value;
713713

714+
/*
715+
Add a Partner Parameter for Snap.
716+
Once set, this parameter is attached to install, opens and events until cleared or the app restarts.
717+
718+
See Snap's documentation for details on valid parameters
719+
*/
720+
- (void)addSnapPartnerParameterWithName:(NSString *)name value:(NSString *)value;
721+
714722
/**
715723
Clears all Partner Parameters
716724
*/

Branch-SDK/Branch.m

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,8 @@ + (void)setTrackingDisabled:(BOOL)disabled {
510510
if (!!currentSetting == !!disabled)
511511
return;
512512
if (disabled) {
513+
[[BNCPartnerParameters shared] clearAllParameters];
514+
513515
// Set the flag (which also clears the settings):
514516
[BNCPreferenceHelper sharedInstance].trackingDisabled = YES;
515517
Branch *branch = Branch.getInstance;
@@ -1020,7 +1022,15 @@ - (void)clearPartnerParameters {
10201022
}
10211023

10221024
- (void)addFacebookPartnerParameterWithName:(NSString *)name value:(NSString *)value {
1023-
[[BNCPartnerParameters shared] addFaceBookParameterWithName:name value:value];
1025+
if (![Branch trackingDisabled]) {
1026+
[[BNCPartnerParameters shared] addFacebookParameterWithName:name value:value];
1027+
}
1028+
}
1029+
1030+
- (void)addSnapPartnerParameterWithName:(NSString *)name value:(NSString *)value {
1031+
if (![Branch trackingDisabled]) {
1032+
[[BNCPartnerParameters shared] addSnapParameterWithName:name value:value];
1033+
}
10241034
}
10251035

10261036
#pragma mark - Pre-initialization support

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

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,53 +108,76 @@ - (void)testJsonEmpty {
108108
}
109109

110110
- (void)testJsonFBParameterEmpty {
111-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@""];
111+
[self.partnerParams addFacebookParameterWithName:@"em" value:@""];
112112
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
113113
XCTAssertTrue([@"{}" isEqualToString:jsonString]);
114114
}
115115

116116
- (void)testJsonFBParameterShort {
117-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"0123456789ABCDEF0123456789ABCDEF1234567890abcdef1234567890abcde"];
117+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"0123456789ABCDEF0123456789ABCDEF1234567890abcdef1234567890abcde"];
118118
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
119119
XCTAssertTrue([@"{}" isEqualToString:jsonString]);
120120
}
121121

122122
- (void)testJsonFBParameterPhoneNumberIsIgnored {
123-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"1-555-555-5555"];
123+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"1-555-555-5555"];
124124
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
125125
XCTAssertTrue([@"{}" isEqualToString:jsonString]);
126126
}
127127

128128
- (void)testJsonFBParameterEmailIsIgnored {
129-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"[email protected]"];
129+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"[email protected]"];
130130
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
131131
XCTAssertTrue([@"{}" isEqualToString:jsonString]);
132132
}
133133

134134
- (void)testJsonFBParameterBase64EncodedIsIgnored {
135135
// 123456789012345678901234567890123456789012345678 -> MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
136-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4"];
136+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4"];
137137
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
138138
XCTAssertTrue([@"{}" isEqualToString:jsonString]);
139139
}
140140

141141
- (void)testJsonFBParameterHashedValue {
142-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
142+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
143143
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
144144
XCTAssertTrue([@"{\"fb\":{\"em\":\"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088\"}}" isEqualToString:jsonString]);
145145
}
146146

147147
- (void)testJsonFBParameterExample {
148-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
149-
[self.partnerParams addFaceBookParameterWithName:@"ph" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
148+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
149+
[self.partnerParams addFacebookParameterWithName:@"ph" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
150150
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
151151

152152
XCTAssertTrue([@"{\"fb\":{\"ph\":\"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b\",\"em\":\"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088\"}}" isEqualToString:jsonString]);
153153
}
154154

155-
- (void)testJsonFBParameterClear {
156-
[self.partnerParams addFaceBookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
157-
[self.partnerParams addFaceBookParameterWithName:@"ph" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
155+
- (void)testJsonSnapParameterExample {
156+
[self.partnerParams addSnapParameterWithName:@"hashed_email_address" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
157+
[self.partnerParams addSnapParameterWithName:@"hashed_phone_number" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
158+
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
159+
160+
XCTAssertTrue([@"{\"snap\":{\"hashed_phone_number\":\"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b\",\"hashed_email_address\":\"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088\"}}" isEqualToString:jsonString]);
161+
}
162+
163+
164+
- (void)testJsonMultipleParameterExample {
165+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
166+
[self.partnerParams addFacebookParameterWithName:@"ph" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
167+
[self.partnerParams addSnapParameterWithName:@"hashed_email_address" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
168+
[self.partnerParams addSnapParameterWithName:@"hashed_phone_number" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
169+
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
170+
171+
NSString *expectedJsonString = @"{\"snap\":{\"hashed_phone_number\":\"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b\",\"hashed_email_address\":\"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088\"},\"fb\":{\"ph\":\"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b\",\"em\":\"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088\"}}";
172+
173+
XCTAssertTrue([expectedJsonString isEqualToString:jsonString]);
174+
}
175+
176+
- (void)testParameterClear {
177+
[self.partnerParams addFacebookParameterWithName:@"em" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
178+
[self.partnerParams addFacebookParameterWithName:@"ph" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
179+
[self.partnerParams addSnapParameterWithName:@"hashed_email_address" value:@"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088"];
180+
[self.partnerParams addSnapParameterWithName:@"hashed_phone_number" value:@"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b"];
158181
[self.partnerParams clearAllParameters];
159182

160183
NSString *jsonString = [self jsonStringFromDictionary:[self.partnerParams parameterJson]];
@@ -179,6 +202,8 @@ - (void)testSampleJson {
179202
XCTAssertTrue([@"{\"fb\":{\"ph\":\"b90598b67534f00b1e3e68e8006631a40d24fba37a3a34e2b84922f1f0b3b29b\",\"em\":\"11234e56af071e9c79927651156bd7a10bca8ac34672aba121056e2698ee7088\"}}" isEqualToString:jsonString]);
180203
}
181204

205+
// There is an assumption that this code always results in the same string for the same json data.
206+
// This appears to be true, but I haven't found documentation to confirm it.
182207
- (NSString *)jsonStringFromDictionary:(NSDictionary *)dictionary {
183208
NSError *error;
184209
NSData *json = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];

0 commit comments

Comments
 (0)