Skip to content

Commit 6d52fb6

Browse files
committed
Merge branch 'master' into SDK-1329-SDK-layout-update
2 parents e01aac0 + afebe7c commit 6d52fb6

File tree

12 files changed

+127
-19
lines changed

12 files changed

+127
-19
lines changed

.github/dependabot.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# To get started with Dependabot version updates, you'll need to specify which
2+
# package ecosystems to update and where the package manifests are located.
3+
# Please see the documentation for all configuration options:
4+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5+
6+
version: 2
7+
updates:
8+
- package-ecosystem: "github-actions" # Maintain dependencies for GitHub Actions
9+
directory: "/" # Location of package manifests
10+
schedule:
11+
interval: "weekly"

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ jobs:
119119
bundle config set --local path vendor
120120
bundle check || bundle install
121121
- name: Download build artifacts
122-
uses: actions/download-artifact@v2
122+
uses: actions/download-artifact@v3
123123
- name: Relocate checksum artifacts
124124
run: |
125125
cp framework/checksum carthage-files

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];

Branch-TestBed/Branch-SDK-Tests/BNCServerInterface.Test.m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,10 +445,15 @@ - (void) testServerInterfaceDictionaryPrepForGbraid {
445445
XCTAssertNotNil([result objectForKey:BRANCH_REQUEST_KEY_REFERRER_GBRAID]);
446446
XCTAssertTrue([[result objectForKey:BRANCH_REQUEST_KEY_REFERRER_GBRAID] isEqualToString:gbraidValue]);
447447

448-
//Check - gbraid should not be present - endpoint is open
448+
// Check for gbraid timestamp
449+
XCTAssertNotNil([result objectForKey:BRANCH_REQUEST_KEY_REFERRER_GBRAID_TIMESTAMP]);
450+
NSString *tsInMs = [NSString stringWithFormat:@"%lld", (long long)([now timeIntervalSince1970]*1000)];
451+
XCTAssertTrue([[result objectForKey:BRANCH_REQUEST_KEY_REFERRER_GBRAID_TIMESTAMP] isEqualToString:tsInMs]);
452+
453+
//Check - gbraid should be present - endpoint is open
449454
serverInterface.requestEndpoint = @"/v1/open";
450455
result = [serverInterface prepareParamDict:NULL key:@"1234567890" retryNumber:3 requestType:@"POST"];
451-
XCTAssertNil([result objectForKey:BRANCH_REQUEST_KEY_REFERRER_GBRAID]);
456+
XCTAssertNotNil([result objectForKey:BRANCH_REQUEST_KEY_REFERRER_GBRAID]);
452457

453458
//Check - gbraid should not be present - validity is expired
454459
NSDate *pastDate = [[NSDate date] dateByAddingTimeInterval:-2592001];

Branch-TestBed/Branch-SDK-Tests/BranchEvent.Test.m

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,22 @@ - (void) testEvent {
130130
[self mutableDictionaryFromBundleJSONWithKey:@"V2EventJSON"];
131131
expectedRequest[@"branch_key"] = Branch.branchKey;
132132
expectedRequest[@"user_data"] = [[BNCDeviceInfo getInstance] v2dictionary];
133+
134+
// Add params for Gbraid
135+
BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance];
136+
if(preferenceHelper.referrerGBRAID){
137+
NSTimeInterval validityWindow = preferenceHelper.referrerGBRAIDValidityWindow;
138+
if (validityWindow) {
139+
NSDate *initDate = preferenceHelper.referrerGBRAIDInitDate ;
140+
NSDate *expirationDate = [initDate dateByAddingTimeInterval:validityWindow];
141+
NSDate *now = [NSDate date];
142+
if ([now compare:expirationDate] == NSOrderedAscending) {
143+
expectedRequest[BRANCH_REQUEST_KEY_REFERRER_GBRAID] = preferenceHelper.referrerGBRAID;
144+
long long timestampInMilliSec = (long long)([initDate timeIntervalSince1970] * 1000.0);
145+
expectedRequest[BRANCH_REQUEST_KEY_REFERRER_GBRAID_TIMESTAMP] = [NSString stringWithFormat:@"%lld", timestampInMilliSec];
146+
}
147+
}
148+
}
133149

134150
Branch *branch = [Branch getInstance:@"key_live_foo"];
135151
XCTestExpectation *expectation = [self expectationWithDescription:@"v2-event"];
@@ -180,6 +196,22 @@ - (void) testUserCompletedAction {
180196
expectedRequest[@"event_data"] = nil;
181197
expectedRequest[@"custom_data"] = nil;
182198
expectedRequest[@"customer_event_alias"] = nil;
199+
200+
// Add params for Gbraid
201+
BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance];
202+
if(preferenceHelper.referrerGBRAID){
203+
NSTimeInterval validityWindow = preferenceHelper.referrerGBRAIDValidityWindow;
204+
if (validityWindow) {
205+
NSDate *initDate = preferenceHelper.referrerGBRAIDInitDate ;
206+
NSDate *expirationDate = [initDate dateByAddingTimeInterval:validityWindow];
207+
NSDate *now = [NSDate date];
208+
if ([now compare:expirationDate] == NSOrderedAscending) {
209+
expectedRequest[BRANCH_REQUEST_KEY_REFERRER_GBRAID] = preferenceHelper.referrerGBRAID;
210+
long long timestampInMilliSec = (long long)([initDate timeIntervalSince1970] * 1000.0);
211+
expectedRequest[BRANCH_REQUEST_KEY_REFERRER_GBRAID_TIMESTAMP] = [NSString stringWithFormat:@"%lld", timestampInMilliSec];
212+
}
213+
}
214+
}
183215

184216
Branch *branch = [Branch getInstance:@"key_live_foo"];
185217
XCTestExpectation *expectation = [self expectationWithDescription:@"v2-event-user-action"];

BranchSDK/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

BranchSDK/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

BranchSDK/BNCServerInterface.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ - (NSMutableDictionary *)prepareParamDict:(NSDictionary *)params
457457
}
458458
}
459459
// For DOWNSTREAM EVENTS v2/events, include referrer_gbraid in request if available
460-
if([self.requestEndpoint containsString:@"/v2/event"]){
460+
if([self.requestEndpoint containsString:@"/v2/event"] || [self.requestEndpoint containsString:@"/v1/open"]){
461461
NSString *ref_gbraid = self.preferenceHelper.referrerGBRAID;
462462
if ((ref_gbraid != nil) && (ref_gbraid.length > 0)) {
463463
// Check if its valid or expired
@@ -468,6 +468,8 @@ - (NSMutableDictionary *)prepareParamDict:(NSDictionary *)params
468468
NSDate *now = [NSDate date];
469469
if ([now compare:expirationDate] == NSOrderedAscending) {
470470
fullParamDict[BRANCH_REQUEST_KEY_REFERRER_GBRAID] = ref_gbraid;
471+
long long timestampInMilliSec = (long long)([initDate timeIntervalSince1970] * 1000.0);
472+
fullParamDict[BRANCH_REQUEST_KEY_REFERRER_GBRAID_TIMESTAMP] = [NSString stringWithFormat:@"%lld", timestampInMilliSec];
471473
}
472474
}
473475
}

BranchSDK/Branch.h

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

722+
/*
723+
Add a Partner Parameter for Snap.
724+
Once set, this parameter is attached to install, opens and events until cleared or the app restarts.
725+
726+
See Snap's documentation for details on valid parameters
727+
*/
728+
- (void)addSnapPartnerParameterWithName:(NSString *)name value:(NSString *)value;
729+
722730
/**
723731
Clears all Partner Parameters
724732
*/

BranchSDK/Branch.m

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,8 @@ + (void)setTrackingDisabled:(BOOL)disabled {
514514
if (!!currentSetting == !!disabled)
515515
return;
516516
if (disabled) {
517+
[[BNCPartnerParameters shared] clearAllParameters];
518+
517519
// Set the flag (which also clears the settings):
518520
[BNCPreferenceHelper sharedInstance].trackingDisabled = YES;
519521
Branch *branch = Branch.getInstance;
@@ -1024,7 +1026,15 @@ - (void)clearPartnerParameters {
10241026
}
10251027

10261028
- (void)addFacebookPartnerParameterWithName:(NSString *)name value:(NSString *)value {
1027-
[[BNCPartnerParameters shared] addFaceBookParameterWithName:name value:value];
1029+
if (![Branch trackingDisabled]) {
1030+
[[BNCPartnerParameters shared] addFacebookParameterWithName:name value:value];
1031+
}
1032+
}
1033+
1034+
- (void)addSnapPartnerParameterWithName:(NSString *)name value:(NSString *)value {
1035+
if (![Branch trackingDisabled]) {
1036+
[[BNCPartnerParameters shared] addSnapParameterWithName:name value:value];
1037+
}
10281038
}
10291039

10301040
#pragma mark - Pre-initialization support

0 commit comments

Comments
 (0)