diff --git a/Branch-TestBed/Branch-TestBed/AppDelegate.m b/Branch-TestBed/Branch-TestBed/AppDelegate.m index aedf3557b..1639425e7 100644 --- a/Branch-TestBed/Branch-TestBed/AppDelegate.m +++ b/Branch-TestBed/Branch-TestBed/AppDelegate.m @@ -41,8 +41,7 @@ - (BOOL)application:(UIApplication *)application // test pre init support //[self testDispatchToIsolationQueue:branch] - - [Branch enableLoggingAtLevel:BranchLogLevelVerbose withCallback:^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) { + [Branch enableLoggingAtLevel:BranchLogLevelVerbose withAdvancedCallback:^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error, NSMutableURLRequest * _Nullable request, BNCServerResponse * _Nullable response) { // Handle the log message and error here. For example, printing to the console: if (error) { NSLog(@"[BranchLog] Level: %lu, Message: %@, Error: %@", (unsigned long)logLevel, message, error.localizedDescription); @@ -50,6 +49,15 @@ - (BOOL)application:(UIApplication *)application NSLog(@"[BranchLog] Level: %lu, Message: %@", (unsigned long)logLevel, message); } + if (request) { + NSString *jsonString = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding]; + NSLog(@"[BranchLog] Got %@ Request: %@", request.URL , jsonString); + } + + if (response) { + NSLog(@"[BranchLog] Got Response for request (%@): %@", response.requestId, response.data); + } + NSString *logEntry = error ? [NSString stringWithFormat:@"Level: %lu, Message: %@, Error: %@", (unsigned long)logLevel, message, error.localizedDescription] : [NSString stringWithFormat:@"Level: %lu, Message: %@", (unsigned long)logLevel, message]; APPLogHookFunction([NSDate date], logLevel, logEntry); diff --git a/Sources/BranchSDK/BNCServerInterface.m b/Sources/BranchSDK/BNCServerInterface.m index 2fc2e29f8..37cfcfd1d 100644 --- a/Sources/BranchSDK/BNCServerInterface.m +++ b/Sources/BranchSDK/BNCServerInterface.m @@ -289,7 +289,7 @@ - (NSURLRequest *)preparePostRequest:(NSDictionary *)params url:(NSString *)url [request setHTTPBody:postData]; if ([[BranchLogger shared] shouldLog:BranchLogLevelDebug]) { - [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nHeaders %@\nBody %@", request, [request allHTTPHeaderFields], [BNCEncodingUtils prettyPrintJSON:updatedParams]] error:nil]; + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nHeaders %@\nBody %@", request, [request allHTTPHeaderFields], [BNCEncodingUtils prettyPrintJSON:updatedParams]] error:nil request:request response:nil]; } return request; @@ -310,7 +310,7 @@ - (BNCServerResponse *)processServerResponse:(NSURLResponse *)response data:(NSD serverResponse.requestId = requestId; if ([[BranchLogger shared] shouldLog:BranchLogLevelDebug]) { - [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nBody %@", response, [BNCEncodingUtils prettyPrintJSON:serverResponse.data]] error:nil]; + [[BranchLogger shared] logDebug:[NSString stringWithFormat:@"%@\nBody %@", response, [BNCEncodingUtils prettyPrintJSON:serverResponse.data]] error:nil request:nil response:serverResponse]; } } else { diff --git a/Sources/BranchSDK/Branch.m b/Sources/BranchSDK/Branch.m index aa83e3928..7fccba72e 100644 --- a/Sources/BranchSDK/Branch.m +++ b/Sources/BranchSDK/Branch.m @@ -256,6 +256,20 @@ - (id)initWithInterface:(BNCServerInterface *)interface if (config.checkPasteboardOnInstall) { [self checkPasteboardOnInstall]; } + + if (config.cppLevel) { + if ([config.cppLevel caseInsensitiveCompare:@"FULL"] == NSOrderedSame) { + [[Branch getInstance] setConsumerProtectionAttributionLevel:BranchAttributionLevelFull]; + } else if ([config.cppLevel caseInsensitiveCompare:@"REDUCED"] == NSOrderedSame) { + [[Branch getInstance] setConsumerProtectionAttributionLevel:BranchAttributionLevelReduced]; + } else if ([config.cppLevel caseInsensitiveCompare:@"MINIMAL"] == NSOrderedSame) { + [[Branch getInstance] setConsumerProtectionAttributionLevel:BranchAttributionLevelMinimal]; + } else if ([config.cppLevel caseInsensitiveCompare:@"NONE"] == NSOrderedSame) { + [[Branch getInstance] setConsumerProtectionAttributionLevel:BranchAttributionLevelNone]; + } else { + NSLog(@"Invalid CPP Level set in branch.json: %@", config.cppLevel); + } + } return self; } @@ -455,6 +469,15 @@ + (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withCallback:(nullable Bra } } ++ (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withAdvancedCallback:(nullable BranchAdvancedLogCallback)callback { + BranchLogger *logger = [BranchLogger shared]; + logger.loggingEnabled = YES; + logger.logLevelThreshold = logLevel; + if (callback) { + logger.advancedLogCallback = callback; + } +} + - (void)useEUEndpoints { [BNCServerAPI sharedInstance].useEUServers = YES; } @@ -632,7 +655,7 @@ - (void)initSessionWithLaunchOptions:(NSDictionary *)options automaticallyDispla #pragma mark - Actual Init Session -- (void)initSessionWithLaunchOptions:(NSDictionary *)options isReferrable:(BOOL)isReferrable explicitlyRequestedReferrable:(BOOL)explicitlyRequestedReferrable automaticallyDisplayController:(BOOL)automaticallyDisplayController registerDeepLinkHandlerUsingBranchUniversalObject:(callbackWithBranchUniversalObject)callback { +- (void)initSessionWithLaunchOptions:(NSDictionary *)options isReferrable:(BOOL)isReferrable explicitlyRequestedReferrable:(BOOL)explicitlyRequestedReferrable automaticallyDisplayController:(BOOL)automaticallyDisplayController registerDeepLinkHandlerUsingBranchUniversalObject:(callbackWithBranchUniversalObject)callback { [self initSceneSessionWithLaunchOptions:options isReferrable:isReferrable explicitlyRequestedReferrable:explicitlyRequestedReferrable automaticallyDisplayController:automaticallyDisplayController registerDeepLinkHandler:^(BNCInitSessionResponse * _Nullable initResponse, NSError * _Nullable error) { if (callback) { @@ -1101,8 +1124,8 @@ - (NSDictionary *)getFirstReferringParams { if (self.deepLinkDebugParams) { NSMutableDictionary* debugInstallParams = - [[BNCEncodingUtils decodeJsonStringToDictionary:self.preferenceHelper.sessionParams] - mutableCopy]; + [[BNCEncodingUtils decodeJsonStringToDictionary:self.preferenceHelper.sessionParams] + mutableCopy]; [debugInstallParams addEntriesFromDictionary:self.deepLinkDebugParams]; return debugInstallParams; } @@ -2112,7 +2135,7 @@ - (void)initializeSessionAndCallCallback:(BOOL)callCallback sceneIdentifier:(NSS [self processNextQueueItem]; }); - } + } } diff --git a/Sources/BranchSDK/BranchJsonConfig.m b/Sources/BranchSDK/BranchJsonConfig.m index a27850daa..649f0e766 100644 --- a/Sources/BranchSDK/BranchJsonConfig.m +++ b/Sources/BranchSDK/BranchJsonConfig.m @@ -18,7 +18,7 @@ NSString * _Nonnull const BranchJsonConfigEnableLogging = @"enableLogging"; NSString * _Nonnull const BranchJsonConfigCheckPasteboardOnInstall = @"checkPasteboardOnInstall"; NSString * _Nonnull const BranchJsonConfigAPIUrl = @"apiUrl"; - +NSString * _Nonnull const BranchJsonConfigCPPLevel = @"consumerProtectionAttributionLevel"; @interface BranchJsonConfig() @property (nonatomic, strong) NSDictionary *configuration; @@ -163,6 +163,11 @@ - (NSString *)apiUrl return self[BranchJsonConfigAPIUrl]; } +- (NSString *)cppLevel +{ + return self[BranchJsonConfigCPPLevel]; +} + - (id)objectForKey:(NSString *)key { return self.configuration[key]; diff --git a/Sources/BranchSDK/BranchLogger.m b/Sources/BranchSDK/BranchLogger.m index d64a65568..1cbd86cb2 100644 --- a/Sources/BranchSDK/BranchLogger.m +++ b/Sources/BranchSDK/BranchLogger.m @@ -53,22 +53,29 @@ - (void)disableCallerDetails { } - (void)logError:(NSString *)message error:(NSError *_Nullable)error { - [self logMessage:message withLevel:BranchLogLevelError error:error]; + [self logMessage:message withLevel:BranchLogLevelError error:error request:nil response:nil]; } - (void)logWarning:(NSString *)message error:(NSError *_Nullable)error { - [self logMessage:message withLevel:BranchLogLevelWarning error:error]; + [self logMessage:message withLevel:BranchLogLevelWarning error:error request:nil response:nil]; } -- (void)logDebug:(NSString *)message error:(NSError *_Nullable)error { - [self logMessage:message withLevel:BranchLogLevelDebug error:error]; +- (void)logDebug:(NSString * _Nonnull)message error:(NSError * _Nullable)error { + [self logDebug:message error:error request:nil response:nil]; +} + +- (void)logDebug:(NSString * _Nonnull)message + error:(NSError * _Nullable)error + request:(NSMutableURLRequest * _Nullable)request + response:(BNCServerResponse * _Nullable)response { + [self logMessage:message withLevel:BranchLogLevelDebug error:error request:request response:response]; } - (void)logVerbose:(NSString *)message error:(NSError *_Nullable)error { - [self logMessage:message withLevel:BranchLogLevelVerbose error:error]; + [self logMessage:message withLevel:BranchLogLevelVerbose error:error request:nil response:nil]; } -- (void)logMessage:(NSString *)message withLevel:(BranchLogLevel)level error:(NSError *_Nullable)error { +- (void)logMessage:(NSString *)message withLevel:(BranchLogLevel)level error:(NSError *_Nullable)error request:(NSMutableURLRequest * _Nullable)request response:(BNCServerResponse * _Nullable)response { if (!self.loggingEnabled || level < self.logLevelThreshold || message.length == 0) { return; } @@ -77,8 +84,10 @@ - (void)logMessage:(NSString *)message withLevel:(BranchLogLevel)level error:(NS if (self.includeCallerDetails) { formattedMessage = [NSString stringWithFormat:@"%@ %@", [self callingClass], message]; } - - if (self.logCallback) { + + if (self.advancedLogCallback) { + self.advancedLogCallback(formattedMessage, level, error, request, response); + } else if (self.logCallback) { self.logCallback(formattedMessage, level, error); } } diff --git a/Sources/BranchSDK/Private/BranchJsonConfig.h b/Sources/BranchSDK/Private/BranchJsonConfig.h index 425d589d0..db15c98a9 100644 --- a/Sources/BranchSDK/Private/BranchJsonConfig.h +++ b/Sources/BranchSDK/Private/BranchJsonConfig.h @@ -31,6 +31,7 @@ extern NSString * _Nonnull const BranchJsonConfigAPIUrl; @property (nonatomic, readonly, assign) BOOL enableLogging; @property (nonatomic, readonly, assign) BOOL checkPasteboardOnInstall; @property (nonatomic, readonly, nullable, copy) NSString *apiUrl; +@property (nonatomic, readonly, nullable, copy) NSString *cppLevel; - (nullable id)objectForKey:(NSString * _Nonnull)key; - (nullable id)objectForKeyedSubscript:(NSString * _Nonnull)key; diff --git a/Sources/BranchSDK/Public/Branch.h b/Sources/BranchSDK/Public/Branch.h index 3f381efeb..f82e60dc5 100644 --- a/Sources/BranchSDK/Public/Branch.h +++ b/Sources/BranchSDK/Public/Branch.h @@ -568,6 +568,7 @@ extern NSString * __nonnull const BNCSpotlightFeature; */ + (void)enableLogging; + (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withCallback:(nullable BranchLogCallback)callback; ++ (void)enableLoggingAtLevel:(BranchLogLevel)logLevel withAdvancedCallback:(nullable BranchAdvancedLogCallback)callback; // The new logging system is independent of the Branch singleton and can be called earlier. - (void)enableLogging __attribute__((deprecated(("This API is deprecated. Please use the static version.")))); diff --git a/Sources/BranchSDK/Public/BranchLogger.h b/Sources/BranchSDK/Public/BranchLogger.h index d0354b387..1d05cd88b 100644 --- a/Sources/BranchSDK/Public/BranchLogger.h +++ b/Sources/BranchSDK/Public/BranchLogger.h @@ -7,6 +7,7 @@ // #import +#import "BNCServerResponse.h" typedef NS_ENUM(NSUInteger, BranchLogLevel) { BranchLogLevelVerbose, // development @@ -16,6 +17,7 @@ typedef NS_ENUM(NSUInteger, BranchLogLevel) { }; typedef void(^BranchLogCallback)(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error); +typedef void(^BranchAdvancedLogCallback)(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error, NSMutableURLRequest * _Nullable request, BNCServerResponse * _Nullable response); NS_ASSUME_NONNULL_BEGIN @@ -24,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) BOOL loggingEnabled; @property (nonatomic, assign) BOOL includeCallerDetails; @property (nonatomic, copy, nullable) BranchLogCallback logCallback; +@property (nonatomic, copy, nullable) BranchAdvancedLogCallback advancedLogCallback; @property (nonatomic, assign) BranchLogLevel logLevelThreshold; + (instancetype _Nonnull)shared; @@ -37,6 +40,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)logError:(NSString * _Nonnull)message error:(NSError * _Nullable)error; - (void)logWarning:(NSString * _Nonnull)message error:(NSError * _Nullable)error; - (void)logDebug:(NSString * _Nonnull)message error:(NSError * _Nullable)error; +- (void)logDebug:(NSString * _Nonnull)message error:(NSError * _Nullable)error request:(NSMutableURLRequest * _Nullable)request response:(BNCServerResponse * _Nullable)response; - (void)logVerbose:(NSString * _Nonnull)message error:(NSError * _Nullable)error; // default Branch log format