Skip to content

Commit ea1241c

Browse files
authored
Send the Apple Search Ad attribution only when it changes (DLA-969, #723).
1 parent b10f131 commit ea1241c

File tree

5 files changed

+36
-36
lines changed

5 files changed

+36
-36
lines changed

Branch-SDK/Branch-SDK/BNCPreferenceHelper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
3939
@property (strong, nonatomic) NSMutableDictionary *savedAnalyticsData;
4040
@property (assign, nonatomic) NSInteger installRequestDelay;
4141
@property (strong, nonatomic) NSDictionary *appleSearchAdDetails;
42+
@property (assign, nonatomic) BOOL appleSearchAdNeedsSend;
4243
@property (strong, nonatomic) NSString *lastSystemBuildVersion;
4344
@property (strong, nonatomic) NSString *browserUserAgentString;
4445
@property (strong, atomic) NSString *branchAPIURL;

Branch-SDK/Branch-SDK/BNCPreferenceHelper.m

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -121,24 +121,6 @@ + (BNCPreferenceHelper *)getInstance {
121121
return preferenceHelper;
122122
}
123123

124-
125-
/*
126-
127-
This creates one global queue. Not so desirable.
128-
129-
- (NSOperationQueue *)persistPrefsQueue {
130-
static NSOperationQueue *persistPrefsQueue;
131-
static dispatch_once_t persistOnceToken;
132-
133-
dispatch_once(&persistOnceToken, ^{
134-
persistPrefsQueue = [[NSOperationQueue alloc] init];
135-
persistPrefsQueue.maxConcurrentOperationCount = 1;
136-
});
137-
138-
return persistPrefsQueue;
139-
}
140-
*/
141-
142124
- (NSOperationQueue *)persistPrefsQueue {
143125
@synchronized (self) {
144126
if (_persistPrefsQueue)
@@ -421,6 +403,14 @@ - (NSDictionary*) appleSearchAdDetails {
421403
return [_appleSearchAdDetails isKindOfClass:[NSDictionary class]] ? _appleSearchAdDetails : nil;
422404
}
423405

406+
- (void) setAppleSearchAdNeedsSend:(BOOL)appleSearchAdNeedsSend {
407+
[self writeBoolToDefaults:@"_appleSearchAdNeedsSend" value:appleSearchAdNeedsSend];
408+
}
409+
410+
- (BOOL) appleSearchAdNeedsSend {
411+
return [self readBoolFromDefaults:@"_appleSearchAdNeedsSend"];
412+
}
413+
424414
- (NSString*) lastSystemBuildVersion {
425415
if (!_lastSystemBuildVersion) {
426416
_lastSystemBuildVersion = [self readStringFromDefaults:@"_lastSystemBuildVersion"];

Branch-SDK/Branch-SDK/Branch.m

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -807,20 +807,21 @@ - (BOOL)checkAppleSearchAdsAttribution {
807807
^ void(NSDictionary *__nullable attrDetails, NSError *__nullable error) {
808808
self.asyncRequestCount--;
809809

810-
if (attrDetails.count) {
811-
self.preferenceHelper.appleSearchAdDetails = attrDetails;
812-
}
813-
else if (self.searchAdsDebugMode) {
810+
if (attrDetails.count == 0 && self.searchAdsDebugMode) {
811+
// Round down to one day for testing.
812+
NSTimeInterval const kOneDay = (60.0*60.0*24.0);
813+
NSTimeInterval t = trunc([[NSDate date] timeIntervalSince1970] / kOneDay) * kOneDay;
814+
NSDate *date = [NSDate dateWithTimeIntervalSince1970:t];
814815

815-
NSDictionary *debugSearchAd = @{
816+
attrDetails = @{
816817
@"Version3.1": @{
817818
@"iad-adgroup-id": @1234567890,
818819
@"iad-adgroup-name": @"AdGroupName",
819820
@"iad-attribution": (id)kCFBooleanTrue,
820821
@"iad-campaign-id": @1234567890,
821822
@"iad-campaign-name": @"CampaignName",
822-
@"iad-click-date": [NSDate date],
823-
@"iad-conversion-date": [NSDate date],
823+
@"iad-click-date": date,
824+
@"iad-conversion-date": date,
824825
@"iad-creative-id": @1234567890,
825826
@"iad-creative-name": @"CreativeName",
826827
@"iad-keyword": @"Keyword",
@@ -829,11 +830,17 @@ - (BOOL)checkAppleSearchAdsAttribution {
829830
@"iad-org-name": @"OrgName"
830831
}
831832
};
833+
}
832834

833-
self.preferenceHelper.appleSearchAdDetails = debugSearchAd;
835+
if (attrDetails == nil) attrDetails = @{};
836+
if (self.preferenceHelper.appleSearchAdDetails == nil)
837+
self.preferenceHelper.appleSearchAdDetails = @{};
838+
if (![self.preferenceHelper.appleSearchAdDetails isEqualToDictionary:attrDetails]) {
839+
self.preferenceHelper.appleSearchAdDetails = attrDetails;
840+
self.preferenceHelper.appleSearchAdNeedsSend = YES;
834841
}
835842

836-
// if there's another async attribution check in flight, don't continue with init
843+
// If there's another async attribution check in flight, don't continue with init
837844
if (self.asyncRequestCount > 0) { return; }
838845

839846
self.preferenceHelper.shouldWaitForInit = NO;
@@ -843,13 +850,14 @@ - (BOOL)checkAppleSearchAdsAttribution {
843850
});
844851
};
845852

846-
((void (*)(id, SEL, void (^ __nullable)(NSDictionary *__nullable attrDetails, NSError * __nullable error)))[sharedClientInstance methodForSelector:requestAttribution])(sharedClientInstance, requestAttribution, completionBlock);
853+
((void (*)(id, SEL, void (^ __nullable)(NSDictionary *__nullable attrDetails, NSError * __nullable error)))
854+
[sharedClientInstance methodForSelector:requestAttribution])
855+
(sharedClientInstance, requestAttribution, completionBlock);
847856

848857
return YES;
849858
}
850859

851-
852-
# pragma mark - Facebook App Link check
860+
#pragma mark - Facebook App Link Check
853861

854862
- (void)registerFacebookDeepLinkingClass:(id)FBSDKAppLinkUtility {
855863
self.FBSDKAppLinkUtility = FBSDKAppLinkUtility;

Branch-SDK/Branch-SDK/Networking/Requests/BranchInstallRequest.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key ca
3838

3939
params[BRANCH_REQUEST_KEY_DEBUG] = @(preferenceHelper.isDebug);
4040

41-
if (preferenceHelper.appleSearchAdDetails) {
41+
if (preferenceHelper.appleSearchAdNeedsSend) {
4242
NSString *encodedSearchData = nil;
4343
@try {
4444
NSData *jsonData = [BNCEncodingUtils encodeDictionaryToJsonData:preferenceHelper.appleSearchAdDetails];

Branch-SDK/Branch-SDK/Networking/Requests/BranchOpenRequest.m

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@ - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key ca
5757
[self safeSetValue:[BNCSystemObserver getAppVersion] forKey:BRANCH_REQUEST_KEY_APP_VERSION onDict:params];
5858
[self safeSetValue:[BNCSystemObserver getDefaultUriScheme] forKey:BRANCH_REQUEST_KEY_URI_SCHEME onDict:params];
5959
[self safeSetValue:[BNCSystemObserver getUpdateState] forKey:BRANCH_REQUEST_KEY_UPDATE onDict:params];
60-
[self safeSetValue:[NSNumber numberWithBool:preferenceHelper.checkedFacebookAppLinks] forKey:BRANCH_REQUEST_KEY_CHECKED_FACEBOOK_APPLINKS onDict:params];
61-
[self safeSetValue:[NSNumber numberWithBool:preferenceHelper.checkedAppleSearchAdAttribution] forKey:BRANCH_REQUEST_KEY_CHECKED_APPLE_AD_ATTRIBUTION onDict:params];
60+
[self safeSetValue:[NSNumber numberWithBool:preferenceHelper.checkedFacebookAppLinks]
61+
forKey:BRANCH_REQUEST_KEY_CHECKED_FACEBOOK_APPLINKS onDict:params];
62+
[self safeSetValue:[NSNumber numberWithBool:preferenceHelper.checkedAppleSearchAdAttribution]
63+
forKey:BRANCH_REQUEST_KEY_CHECKED_APPLE_AD_ATTRIBUTION onDict:params];
6264
[self safeSetValue:preferenceHelper.linkClickIdentifier forKey:BRANCH_REQUEST_KEY_LINK_IDENTIFIER onDict:params];
6365
[self safeSetValue:preferenceHelper.spotlightIdentifier forKey:BRANCH_REQUEST_KEY_SPOTLIGHT_IDENTIFIER onDict:params];
6466
[self safeSetValue:preferenceHelper.universalLinkUrl forKey:BRANCH_REQUEST_KEY_UNIVERSAL_LINK_URL onDict:params];
@@ -70,7 +72,7 @@ - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key ca
7072
[cdDict bnc_safeSetObject:[BNCSystemObserver getBundleID] forKey:BRANCH_BUNDLE_IDENTIFIER];
7173
[self safeSetValue:cdDict forKey:BRANCH_CONTENT_DISCOVER_KEY onDict:params];
7274

73-
if (preferenceHelper.appleSearchAdDetails) {
75+
if (preferenceHelper.appleSearchAdNeedsSend) {
7476
NSString *encodedSearchData = nil;
7577
@try {
7678
NSData *jsonData = [BNCEncodingUtils encodeDictionaryToJsonData:preferenceHelper.appleSearchAdDetails];
@@ -80,7 +82,6 @@ - (void)makeRequest:(BNCServerInterface *)serverInterface key:(NSString *)key ca
8082
forKey:BRANCH_REQUEST_KEY_SEARCH_AD
8183
onDict:params];
8284
}
83-
/**/
8485

8586
[serverInterface postRequest:params url:[preferenceHelper getAPIURL:BRANCH_REQUEST_ENDPOINT_OPEN] key:key callback:callback];
8687
}
@@ -186,7 +187,7 @@ - (void)processResponse:(BNCServerResponse *)response error:(NSError *)error {
186187
preferenceHelper.spotlightIdentifier = nil;
187188
preferenceHelper.universalLinkUrl = nil;
188189
preferenceHelper.externalIntentURI = nil;
189-
preferenceHelper.appleSearchAdDetails = nil;
190+
preferenceHelper.appleSearchAdNeedsSend = NO;
190191

191192
if (data[BRANCH_RESPONSE_KEY_BRANCH_IDENTITY]) {
192193
preferenceHelper.identityID = data[BRANCH_RESPONSE_KEY_BRANCH_IDENTITY];

0 commit comments

Comments
 (0)