Skip to content

Commit 0ed9036

Browse files
committed
SKAN logic is moved in BNCSKAdNetwork
1 parent 3af64f8 commit 0ed9036

4 files changed

Lines changed: 78 additions & 86 deletions

File tree

Sources/BranchSDK/BNCSKAdNetwork.m

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,75 @@ - (BOOL) shouldCallPostbackForDataResponse:(NSDictionary *) dataResponseDictiona
218218
return shouldCallUpdatePostback;
219219
}
220220

221+
- (void)updateConversionValueFromResponse:(NSDictionary *)responseData {
222+
if (![responseData[BRANCH_RESPONSE_KEY_UPDATE_CONVERSION_VALUE] isKindOfClass:NSNumber.class]) {
223+
return;
224+
}
225+
226+
NSNumber *conversionValue = (NSNumber *)responseData[BRANCH_RESPONSE_KEY_UPDATE_CONVERSION_VALUE];
227+
if (!conversionValue || ![BNCPreferenceHelper sharedInstance].invokeRegisterApp) {
228+
return;
229+
}
230+
231+
void (^completionHandler)(NSError *) = ^(NSError * _Nullable error) {
232+
if (error) {
233+
[[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error];
234+
} else {
235+
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil];
236+
}
237+
};
238+
239+
if (@available(iOS 16.1, macCatalyst 16.1, *)) {
240+
NSString *coarseConversionValue = [self getCoarseConversionValueFromDataResponse:responseData];
241+
BOOL lockWin = [self getLockedStatusFromDataResponse:responseData];
242+
BOOL shouldCallUpdatePostback = [self shouldCallPostbackForDataResponse:responseData];
243+
244+
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)[BNCPreferenceHelper sharedInstance].skanCurrentWindow, [BNCPreferenceHelper sharedInstance].firstAppLaunchTime] error:nil];
245+
246+
if (shouldCallUpdatePostback) {
247+
[self updatePostbackConversionValue:conversionValue.longValue coarseValue:coarseConversionValue lockWindow:lockWin completionHandler:completionHandler];
248+
}
249+
} else if (@available(iOS 15.4, macCatalyst 15.4, *)) {
250+
[self updatePostbackConversionValue:conversionValue.intValue completionHandler:completionHandler];
251+
} else {
252+
[self updateConversionValue:conversionValue.integerValue];
253+
}
254+
}
255+
256+
- (void (^)(NSError *))skanCompletionHandlerWithSuccessDescription:(NSString *)description {
257+
return ^(NSError * _Nullable error) {
258+
if (error) {
259+
[[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error];
260+
} else {
261+
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful for %@", description] error:nil];
262+
}
263+
};
264+
}
265+
266+
- (void)registerAndUpdateConversionFromResponse:(NSDictionary *)data isInstall:(BOOL)isInstall {
267+
BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance];
268+
269+
if ([data[BRANCH_RESPONSE_KEY_INVOKE_REGISTER_APP] isKindOfClass:NSNumber.class]) {
270+
NSNumber *invokeRegister = (NSNumber *)data[BRANCH_RESPONSE_KEY_INVOKE_REGISTER_APP];
271+
preferenceHelper.invokeRegisterApp = invokeRegister.boolValue;
272+
if (invokeRegister.boolValue && isInstall) {
273+
void (^completionHandler)(NSError *) = [self skanCompletionHandlerWithSuccessDescription:@"INSTALL Event"];
274+
if (@available(iOS 16.1, macCatalyst 16.1, *)){
275+
NSString *defaultCoarseConValue = [self getCoarseConversionValueFromDataResponse:@{}];
276+
[self updatePostbackConversionValue:0 coarseValue:defaultCoarseConValue
277+
lockWindow:NO completionHandler:completionHandler];
278+
} else if (@available(iOS 15.4, macCatalyst 15.4, *)){
279+
[self updatePostbackConversionValue:0 completionHandler:completionHandler];
280+
}
281+
else {
282+
[self registerAppForAdNetworkAttribution];
283+
}
284+
}
285+
} else {
286+
preferenceHelper.invokeRegisterApp = NO;
287+
}
288+
}
289+
221290
- (BOOL)isSKANAllowedForAttributionLevel {
222291
BranchAttributionLevel level = [[BNCPreferenceHelper sharedInstance] attributionLevel];
223292
return !([level isEqualToString:BranchAttributionLevelMinimal] ||

Sources/BranchSDK/BranchEvent.m

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#import "BNCReachability.h"
1515
#import "BNCSKAdNetwork.h"
1616
#import "BNCPartnerParameters.h"
17-
#import "BNCPreferenceHelper.h"
1817
#import "BNCEventUtils.h"
1918
#import "BNCRequestFactory.h"
2019
#import "BNCServerAPI.h"
@@ -88,38 +87,8 @@ - (void)processResponse:(BNCServerResponse*)response error:(NSError*)error {
8887
? (NSDictionary*) response.data : nil;
8988

9089
#if !TARGET_OS_TV
91-
if (dictionary && [dictionary[BRANCH_RESPONSE_KEY_UPDATE_CONVERSION_VALUE] isKindOfClass:NSNumber.class]) {
92-
NSNumber *conversionValue = (NSNumber *)dictionary[BRANCH_RESPONSE_KEY_UPDATE_CONVERSION_VALUE];
93-
// Regardless of SKAN opted-in in dashboard, we always get conversionValue, so adding check to find out if install/open response had "invoke_register_app" true
94-
if (conversionValue && [BNCPreferenceHelper sharedInstance].invokeRegisterApp) {
95-
if (@available(iOS 16.1, macCatalyst 16.1, *)){
96-
NSString * coarseConversionValue = [[BNCSKAdNetwork sharedInstance] getCoarseConversionValueFromDataResponse:dictionary] ;
97-
BOOL lockWin = [[BNCSKAdNetwork sharedInstance] getLockedStatusFromDataResponse:dictionary];
98-
BOOL shouldCallUpdatePostback = [[BNCSKAdNetwork sharedInstance] shouldCallPostbackForDataResponse:dictionary];
99-
100-
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)[BNCPreferenceHelper sharedInstance].skanCurrentWindow, [BNCPreferenceHelper sharedInstance].firstAppLaunchTime] error:nil];
101-
if(shouldCallUpdatePostback){
102-
[[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue: conversionValue.longValue coarseValue:coarseConversionValue lockWindow:lockWin completionHandler:^(NSError * _Nullable error) {
103-
if (error) {
104-
[[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error];
105-
} else {
106-
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil];
107-
}
108-
}];
109-
}
110-
111-
} else if (@available(iOS 15.4, macCatalyst 15.4, *)) {
112-
[[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:conversionValue.intValue completionHandler: ^(NSError *error){
113-
if (error) {
114-
[[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error];
115-
} else {
116-
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful. Conversion Value - %@", conversionValue] error:nil];
117-
}
118-
}];
119-
} else {
120-
[[BNCSKAdNetwork sharedInstance] updateConversionValue:conversionValue.integerValue];
121-
}
122-
}
90+
if (dictionary) {
91+
[[BNCSKAdNetwork sharedInstance] updateConversionValueFromResponse:dictionary];
12392
}
12493
#endif
12594

Sources/BranchSDK/BranchOpenRequest.m

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -233,64 +233,14 @@ - (void)clearLinkIdentifiersWithReferringURL:(NSString *)referringURL {
233233

234234
- (void)handleSKANWithResponseData:(NSDictionary *)data {
235235
#if !TARGET_OS_TV
236-
BNCPreferenceHelper *preferenceHelper = [BNCPreferenceHelper sharedInstance];
237-
238-
if ([data[BRANCH_RESPONSE_KEY_INVOKE_REGISTER_APP] isKindOfClass:NSNumber.class]) {
239-
NSNumber *invokeRegister = (NSNumber *)data[BRANCH_RESPONSE_KEY_INVOKE_REGISTER_APP];
240-
preferenceHelper.invokeRegisterApp = invokeRegister.boolValue;
241-
if (invokeRegister.boolValue && self.isInstall) {
242-
void (^completionHandler)(NSError *) = [self skanCompletionHandlerWithSuccessDescription:@"INSTALL Event"];
243-
if (@available(iOS 16.1, macCatalyst 16.1, *)){
244-
NSString *defaultCoarseConValue = [[BNCSKAdNetwork sharedInstance] getCoarseConversionValueFromDataResponse:@{}];
245-
[[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:0 coarseValue:defaultCoarseConValue
246-
lockWindow:NO completionHandler:completionHandler];
247-
} else if (@available(iOS 15.4, macCatalyst 15.4, *)){
248-
[[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:0 completionHandler:completionHandler];
249-
}
250-
else {
251-
[[BNCSKAdNetwork sharedInstance] registerAppForAdNetworkAttribution];
252-
}
253-
}
254-
} else {
255-
preferenceHelper.invokeRegisterApp = NO;
256-
}
236+
[[BNCSKAdNetwork sharedInstance] registerAndUpdateConversionFromResponse:data isInstall:self.isInstall];
257237

258-
if (data && [data[BRANCH_RESPONSE_KEY_UPDATE_CONVERSION_VALUE] isKindOfClass:NSNumber.class] && !self.isInstall) {
259-
NSNumber *conversionValue = (NSNumber *)data[BRANCH_RESPONSE_KEY_UPDATE_CONVERSION_VALUE];
260-
// Regardless of SKAN opted-in in dashboard, we always get conversionValue, so adding check to find out if install/open response had "invoke_register_app" true
261-
if (conversionValue && preferenceHelper.invokeRegisterApp ) {
262-
void (^completionHandler)(NSError *) = [self skanCompletionHandlerWithSuccessDescription:
263-
[NSString stringWithFormat:@"Conversion Value - %@", conversionValue]];
264-
if (@available(iOS 16.1, macCatalyst 16.1, *)){
265-
NSString* coarseConversionValue = [[BNCSKAdNetwork sharedInstance] getCoarseConversionValueFromDataResponse:data] ;
266-
BOOL lockWin = [[BNCSKAdNetwork sharedInstance] getLockedStatusFromDataResponse:data];
267-
BOOL shouldCallUpdatePostback = [[BNCSKAdNetwork sharedInstance] shouldCallPostbackForDataResponse:data];
268-
269-
[[BranchLogger shared] logDebug: [NSString stringWithFormat:@"SKAN 4.0 params - conversionValue:%@ coarseValue:%@, locked:%d, shouldCallPostback:%d, currentWindow:%d, firstAppLaunchTime: %@", conversionValue, coarseConversionValue, lockWin, shouldCallUpdatePostback, (int)preferenceHelper.skanCurrentWindow, preferenceHelper.firstAppLaunchTime] error:nil];
270-
271-
if(shouldCallUpdatePostback){
272-
[[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue: conversionValue.longValue coarseValue:coarseConversionValue lockWindow:lockWin completionHandler:completionHandler];
273-
}
274-
} else if (@available(iOS 15.4, macCatalyst 15.4, *)) {
275-
[[BNCSKAdNetwork sharedInstance] updatePostbackConversionValue:conversionValue.intValue completionHandler:completionHandler];
276-
} else {
277-
[[BNCSKAdNetwork sharedInstance] updateConversionValue:conversionValue.integerValue];
278-
}
279-
}
238+
if (!self.isInstall) {
239+
[[BNCSKAdNetwork sharedInstance] updateConversionValueFromResponse:data];
280240
}
281241
#endif
282242
}
283243

284-
- (void (^)(NSError *))skanCompletionHandlerWithSuccessDescription:(NSString *)description {
285-
return ^(NSError * _Nullable error) {
286-
if (error) {
287-
[[BranchLogger shared] logError:[NSString stringWithFormat:@"Update conversion value failed with error - %@", [error description]] error:error];
288-
} else {
289-
[[BranchLogger shared] logDebug:[NSString stringWithFormat:@"Update conversion value was successful for %@", description] error:nil];
290-
}
291-
};
292-
}
293-
294244
- (BOOL) invokeFeatures:(NSDictionary *)invokeFeatures {
295245

296246
NSString *uxType = invokeFeatures[BRANCH_RESPONSE_KEY_ENHANCED_WEB_LINK_UX];

Sources/BranchSDK/Private/BNCSKAdNetwork.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ typedef NS_ENUM(NSInteger, BranchSkanWindow) {
4545

4646
- (BOOL) shouldCallPostbackForDataResponse:(NSDictionary *) dataResponseDictionary;
4747

48+
- (void)updateConversionValueFromResponse:(NSDictionary *)responseData;
49+
50+
- (void)registerAndUpdateConversionFromResponse:(NSDictionary *)data isInstall:(BOOL)isInstall;
51+
4852
@end
4953

5054
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)