Skip to content

Commit 15b8913

Browse files
committed
CORE-1521 optional partner parameters for FB
1 parent 083329b commit 15b8913

File tree

12 files changed

+359
-4
lines changed

12 files changed

+359
-4
lines changed

Branch-SDK/BNCPartnerParameters.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// BNCPartnerParameters.h
3+
// Branch
4+
//
5+
// Created by Ernest Cho on 12/9/20.
6+
// Copyright © 2020 Branch, Inc. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
11+
NS_ASSUME_NONNULL_BEGIN
12+
13+
/**
14+
Parameters that clients wish to share with partners
15+
*/
16+
@interface BNCPartnerParameters : NSObject
17+
18+
+ (instancetype)shared;
19+
20+
// FB partner parameters, see FB documentation for details
21+
// Values that do not looks like a valid SHA-256 hash are ignored
22+
- (void)addFaceBookParameterWithName:(NSString *)name value:(NSString *)value;
23+
24+
- (void)clearAllParameters;
25+
26+
// reference to the internal json dictionary
27+
- (NSDictionary *)parameterJson;
28+
29+
@end
30+
31+
NS_ASSUME_NONNULL_END

Branch-SDK/BNCPartnerParameters.m

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
//
2+
// BNCPartnerParameters.m
3+
// Branch
4+
//
5+
// Created by Ernest Cho on 12/9/20.
6+
// Copyright © 2020 Branch, Inc. All rights reserved.
7+
//
8+
9+
#import "BNCPartnerParameters.h"
10+
11+
@interface BNCPartnerParameters()
12+
@property (nonatomic, strong, readwrite) NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, NSString *> *> *parameters;
13+
@end
14+
15+
@implementation BNCPartnerParameters
16+
17+
+ (instancetype)shared {
18+
static BNCPartnerParameters *partnerParameters;
19+
static dispatch_once_t onceToken;
20+
dispatch_once(&onceToken, ^{
21+
partnerParameters = [BNCPartnerParameters new];
22+
});
23+
return partnerParameters;
24+
}
25+
26+
- (instancetype)init {
27+
self = [super init];
28+
if (self) {
29+
self.parameters = [NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, NSString *> *> new];
30+
}
31+
return self;
32+
}
33+
34+
- (void)clearAllParameters {
35+
self.parameters = [NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, NSString *> *> new];
36+
}
37+
38+
- (NSMutableDictionary<NSString *, NSString *> *)parametersForPartner:(NSString *)partnerName {
39+
NSMutableDictionary<NSString *, NSString *> *parametersForPartner = [self.parameters objectForKey:partnerName];
40+
if (!parametersForPartner) {
41+
parametersForPartner = [NSMutableDictionary<NSString *, NSString *> new];
42+
[self.parameters setObject:parametersForPartner forKey:partnerName];
43+
}
44+
return parametersForPartner;
45+
}
46+
47+
- (void)addParameterWithName:(NSString *)name value:(NSString *)value partnerName:(NSString *)partnerName {
48+
NSMutableDictionary<NSString *, NSString *> *parametersForPartner = [self parametersForPartner:partnerName];
49+
[parametersForPartner setObject:value forKey:name];
50+
}
51+
52+
- (void)addFaceBookParameterWithName:(NSString *)name value:(NSString *)value {
53+
if ([self sha256HashSanityCheckValue:value]) {
54+
[self addParameterWithName:name value:value partnerName:@"fb"];
55+
} 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+
}
58+
}
59+
60+
- (BOOL)sha256HashSanityCheckValue:(NSString *)value {
61+
return ([value length] == 64 && [self isStringHex:value]);
62+
}
63+
64+
- (BOOL)isStringHex:(NSString *)string {
65+
NSCharacterSet *chars = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEF"] invertedSet];
66+
return (NSNotFound == [[string uppercaseString] rangeOfCharacterFromSet:chars].location);
67+
}
68+
69+
- (NSDictionary *)parameterJson {
70+
return self.parameters;
71+
}
72+
73+
@end

Branch-SDK/Branch.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,19 @@ typedef NS_ENUM(NSUInteger, BranchCreditHistoryOrder) {
690690
*/
691691
- (void)setSKAdNetworkCalloutMaxTimeSinceInstall:(NSTimeInterval)maxTimeInterval;
692692

693+
/*
694+
Add a Partner Parameter for Facebook.
695+
Once set, this parameter is attached to install, opens and events until cleared or the app restarts.
696+
697+
See Facebook's documentation for details on valid parameters
698+
*/
699+
- (void)addFacebookPartnerParameterWithName:(NSString *)name value:(NSString *)value;
700+
701+
/**
702+
Clears all Partner Parameters
703+
*/
704+
- (void)clearPartnerParameters;
705+
693706
/**
694707
Specify the time to wait in seconds between retries in the case of a Branch server error
695708

Branch-SDK/Branch.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#import "BNCCallbackMap.h"
4444
#import "BNCSKAdNetwork.h"
4545
#import "BNCAppGroupsData.h"
46+
#import "BNCPartnerParameters.h"
4647

4748
#if !TARGET_OS_TV
4849
#import "BNCUserAgentCollector.h"
@@ -972,6 +973,16 @@ - (void)setSKAdNetworkCalloutMaxTimeSinceInstall:(NSTimeInterval)maxTimeInterval
972973
[BNCSKAdNetwork sharedInstance].maxTimeSinceInstall = maxTimeInterval;
973974
}
974975

976+
#pragma mark - Partner Parameters
977+
978+
- (void)clearPartnerParameters {
979+
[[BNCPartnerParameters shared] clearAllParameters];
980+
}
981+
982+
- (void)addFacebookPartnerParameterWithName:(NSString *)name value:(NSString *)value {
983+
[[BNCPartnerParameters shared] addFaceBookParameterWithName:name value:value];
984+
}
985+
975986
#pragma mark - Pre-initialization support
976987

977988
- (void) dispatchToIsolationQueue:(dispatch_block_t) initBlock {

Branch-SDK/BranchConstants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ extern NSString * const BRANCH_REQUEST_KEY_LATEST_APP_CLIP_INSTALL_TIME;
7373
extern NSString * const BRANCH_REQUEST_KEY_APP_CLIP_RANDOMIZED_DEVICE_TOKEN;
7474
extern NSString * const BRANCH_REQUEST_KEY_APP_CLIP_RANDOMIZED_BUNDLE_TOKEN;
7575

76+
extern NSString * const BRANCH_REQUEST_KEY_PARTNER_PARAMETERS;
7677

7778
extern NSString * const BRANCH_REQUEST_ENDPOINT_SET_IDENTITY;
7879
extern NSString * const BRANCH_REQUEST_ENDPOINT_APP_LINK_SETTINGS;

Branch-SDK/BranchConstants.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@
6868
NSString * const BRANCH_REQUEST_KEY_APP_CLIP_RANDOMIZED_DEVICE_TOKEN = @"app_clip_randomized_device_token";
6969
NSString * const BRANCH_REQUEST_KEY_APP_CLIP_RANDOMIZED_BUNDLE_TOKEN = @"app_clip_randomized_bundle_token";
7070

71+
NSString * const BRANCH_REQUEST_KEY_PARTNER_PARAMETERS = @"partner_data";
72+
7173
NSString * const BRANCH_REQUEST_ENDPOINT_SET_IDENTITY = @"profile";
7274
NSString * const BRANCH_REQUEST_ENDPOINT_APP_LINK_SETTINGS = @"app-link-settings";
7375
NSString * const BRANCH_REQUEST_ENDPOINT_LOGOUT = @"logout";

Branch-SDK/BranchEvent.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#import "BNCCallbackMap.h"
1212
#import "BNCReachability.h"
1313
#import "BNCSKAdNetwork.h"
14+
#import "BNCPartnerParameters.h"
1415

1516
#pragma mark BranchStandardEvents
1617

@@ -301,6 +302,12 @@ - (NSDictionary *)buildEventDictionary {
301302
if (contentItemDictionaries.count) {
302303
eventDictionary[@"content_items"] = contentItemDictionaries;
303304
}
305+
306+
NSDictionary *partnerParameters = [[BNCPartnerParameters shared] parameterJson];
307+
if (partnerParameters.count > 0) {
308+
eventDictionary[BRANCH_REQUEST_KEY_PARTNER_PARAMETERS] = partnerParameters;
309+
}
310+
304311
return eventDictionary;
305312
}
306313

Branch-SDK/BranchInstallRequest.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#import "BNCApplication.h"
1515
#import "BNCAppleReceipt.h"
1616
#import "BNCAppGroupsData.h"
17+
#import "BNCPartnerParameters.h"
1718

1819
@implementation BranchInstallRequest
1920

@@ -48,6 +49,11 @@ - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key ca
4849
[self safeSetValue:[BNCAppGroupsData shared].bundleToken forKey:BRANCH_REQUEST_KEY_APP_CLIP_RANDOMIZED_BUNDLE_TOKEN onDict:params];
4950
}
5051

52+
NSDictionary *partnerParameters = [[BNCPartnerParameters shared] parameterJson];
53+
if (partnerParameters.count > 0) {
54+
[self safeSetValue:partnerParameters forKey:BRANCH_REQUEST_KEY_PARTNER_PARAMETERS onDict:params];
55+
}
56+
5157
params[BRANCH_REQUEST_KEY_DEBUG] = @(preferenceHelper.isDebug);
5258

5359
if (preferenceHelper.appleSearchAdNeedsSend) {

Branch-SDK/BranchOpenRequest.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#import "BNCTuneUtility.h"
2121
#import "BNCSKAdNetwork.h"
2222
#import "BNCAppGroupsData.h"
23+
#import "BNCPartnerParameters.h"
2324

2425
@interface BranchOpenRequest ()
2526
@property (assign, nonatomic) BOOL isInstall;
@@ -85,6 +86,11 @@ - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key ca
8586
forKey:BRANCH_REQUEST_KEY_SEARCH_AD
8687
onDict:params];
8788
}
89+
90+
NSDictionary *partnerParameters = [[BNCPartnerParameters shared] parameterJson];
91+
if (partnerParameters.count > 0) {
92+
[self safeSetValue:partnerParameters forKey:BRANCH_REQUEST_KEY_PARTNER_PARAMETERS onDict:params];
93+
}
8894

8995
BNCApplication *application = [BNCApplication currentApplication];
9096
params[@"lastest_update_time"] = BNCWireFormatFromDate(application.currentBuildDate);

0 commit comments

Comments
 (0)