Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Kits/braze/braze-14/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ let package = Package(
dependencies: [
.product(name: "mParticle-Apple-SDK", package: "mParticle-Apple-SDK"),
.product(name: "BrazeUI", package: "braze-swift-sdk", condition: .when(platforms: [.iOS])),
.product(name: "BrazeKit", package: "braze-swift-sdk"),
.product(name: "BrazeKitCompat", package: "braze-swift-sdk")
.product(name: "BrazeKit", package: "braze-swift-sdk")
],
resources: [.process("PrivacyInfo.xcprivacy")]
),
Expand Down
58 changes: 27 additions & 31 deletions Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

#if TARGET_OS_IOS
@import BrazeKit;
@import BrazeKitCompat;
@import BrazeUI;
#else
@import BrazeKit;
@import BrazeKitCompat;
#endif

static NSString *const eabAPIKey = @"apiKey";
Expand Down Expand Up @@ -60,6 +58,14 @@
static NSString *const BGoogleAdUserDataKey = @"$google_ad_user_data";
static NSString *const BGoogleAdPersonalizationKey = @"$google_ad_personalization";

// Braze configuration option keys used internally by the options dictionary
static NSString *const kMPBrazeConfigEndpoint = @"endpoint";
static NSString *const kMPBrazeConfigRequestPolicy = @"requestPolicy";
static NSString *const kMPBrazeConfigFlushInterval = @"flushInterval";
static NSString *const kMPBrazeConfigSessionTimeout = @"sessionTimeout";
static NSString *const kMPBrazeConfigTriggerMinimumTimeInterval = @"triggerMinimumTimeInterval";
static NSString *const kMPBrazeConfigAutomaticLocationCollection = @"automaticLocationCollection";

#if TARGET_OS_IOS
static id<BrazeInAppMessageUIDelegate> inAppMessageControllerDelegate = nil;
static BOOL shouldDisableNotificationHandling = NO;
Expand Down Expand Up @@ -371,20 +377,20 @@ - (id const)providerKitInstance {
- (void)start {
if (!self->brazeInstanceLocal) {
NSDictionary *optionsDict = [self optionsDictionary];
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:self.configuration[eabAPIKey] endpoint:optionsDict[ABKEndpointKey]];
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:self.configuration[eabAPIKey] endpoint:optionsDict[kMPBrazeConfigEndpoint]];

[configuration.api addSDKMetadata:@[BRZSDKMetadata.mparticle]];
configuration.api.sdkFlavor = ((NSNumber *)optionsDict[ABKSDKFlavorKey]).intValue;
configuration.api.requestPolicy = ((NSNumber *)optionsDict[ABKRequestProcessingPolicyOptionKey]).intValue;
NSNumber *flushIntervalOption = (NSNumber *)optionsDict[ABKFlushIntervalOptionKey] ?: @10; // If not set, use the default 10 seconds specified in Braze SDK header
configuration.api.sdkFlavor = BRZSDKFlavorMparticle;
configuration.api.requestPolicy = ((NSNumber *)optionsDict[kMPBrazeConfigRequestPolicy]).intValue;
NSNumber *flushIntervalOption = (NSNumber *)optionsDict[kMPBrazeConfigFlushInterval] ?: @10; // If not set, use the default 10 seconds specified in Braze SDK header
configuration.api.flushInterval = flushIntervalOption.doubleValue < 1.0 ? 1.0 : flushIntervalOption.doubleValue; // Ensure value is above the minimum of 1.0 per run time warning from Braze SDK
configuration.api.trackingPropertyAllowList = brazeTrackingPropertyAllowList;
configuration.sessionTimeout = ((NSNumber *)optionsDict[ABKSessionTimeoutKey]).doubleValue;
configuration.triggerMinimumTimeInterval = ((NSNumber *)optionsDict[ABKMinimumTriggerTimeIntervalKey]).doubleValue;
NSNumber *automaticLocationTrackingOption = (NSNumber *)optionsDict[ABKEnableAutomaticLocationCollectionKey];

configuration.sessionTimeout = ((NSNumber *)optionsDict[kMPBrazeConfigSessionTimeout]).doubleValue;

configuration.triggerMinimumTimeInterval = ((NSNumber *)optionsDict[kMPBrazeConfigTriggerMinimumTimeInterval]).doubleValue;

NSNumber *automaticLocationTrackingOption = (NSNumber *)optionsDict[kMPBrazeConfigAutomaticLocationCollection];
if (automaticLocationTrackingOption != nil && automaticLocationTrackingOption.boolValue && brazeLocationProvider) {
configuration.location.automaticLocationCollection = YES;
configuration.location.brazeLocationProvider = brazeLocationProvider;
Expand Down Expand Up @@ -443,9 +449,10 @@ - (void)stop {
_configuration = nil;
}

// This maps the mParticle keys (prefixed with ABK) to the Braze Swift SDK configuration keys (prefixed with kMPBrazeConfig).
- (NSMutableDictionary<NSString *, NSObject *> *)optionsDictionary {
NSArray <NSString *> *serverKeys = @[@"ABKRequestProcessingPolicyOptionKey", @"ABKFlushIntervalOptionKey", @"ABKSessionTimeoutKey", @"ABKMinimumTriggerTimeIntervalKey"];
NSArray <NSString *> *brazeKeys = @[ABKRequestProcessingPolicyOptionKey, ABKFlushIntervalOptionKey, ABKSessionTimeoutKey, ABKMinimumTriggerTimeIntervalKey];
NSArray <NSString *> *configKeys = @[kMPBrazeConfigRequestPolicy, kMPBrazeConfigFlushInterval, kMPBrazeConfigSessionTimeout, kMPBrazeConfigTriggerMinimumTimeInterval];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just nit:
Both maps configKeys and serverKeys can be converted to dictionary
So you will not need idx, and these map allows to keep properties always consistent.

Also values from serverKeys can be extracted to constants too.

NSMutableDictionary<NSString *, NSObject *> *optionsDictionary = [[NSMutableDictionary alloc] initWithCapacity:serverKeys.count];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterNoStyle;
Expand All @@ -454,42 +461,31 @@ - (void)stop {
NSString *optionValue = self.configuration[serverKey];

if (optionValue != nil && (NSNull *)optionValue != [NSNull null]) {
NSString *brazeKey = brazeKeys[idx];
NSNumber *numberValue = nil;
@try {
numberValue = [numberFormatter numberFromString:optionValue];
} @catch (NSException *exception) {
numberValue = nil;
}
if (numberValue != nil) {
optionsDictionary[brazeKey] = numberValue;
optionsDictionary[configKeys[idx]] = numberValue;
}
}
}];

if (self.host.length) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
optionsDictionary[ABKEndpointKey] = self.host;
#pragma clang diagnostic pop
optionsDictionary[kMPBrazeConfigEndpoint] = self.host;
}

if (optionsDictionary.count == 0) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
optionsDictionary = [[NSMutableDictionary alloc] initWithCapacity:serverKeys.count];
}
optionsDictionary[ABKSDKFlavorKey] = @(MPARTICLE);
Comment thread
rmi22186 marked this conversation as resolved.
#pragma clang diagnostic pop


#if TARGET_OS_IOS
optionsDictionary[ABKEnableAutomaticLocationCollectionKey] = @(YES);
optionsDictionary[kMPBrazeConfigAutomaticLocationCollection] = @(YES);
if (self.configuration[@"ABKDisableAutomaticLocationCollectionKey"]) {
if ([self.configuration[@"ABKDisableAutomaticLocationCollectionKey"] caseInsensitiveCompare:@"true"] == NSOrderedSame) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
optionsDictionary[ABKEnableAutomaticLocationCollectionKey] = @(NO);
#pragma clang diagnostic pop
optionsDictionary[kMPBrazeConfigAutomaticLocationCollection] = @(NO);
}
}
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
@import XCTest;
@import OCMock;
#if TARGET_OS_IOS
@import BrazeKitCompat;
@import BrazeUI;
#else
@import BrazeKitCompat;
#endif

@interface MPKitBraze ()
Expand All @@ -23,6 +20,14 @@ - (MPKitExecStatus *)setUserAttribute:(NSString *)key value:(NSString *)value;

@end

// Keys matching MPKitBraze optionsDictionary
static NSString *const kMPBrazeConfigEndpoint = @"endpoint";
static NSString *const kMPBrazeConfigRequestPolicy = @"requestPolicy";
static NSString *const kMPBrazeConfigFlushInterval = @"flushInterval";
static NSString *const kMPBrazeConfigSessionTimeout = @"sessionTimeout";
static NSString *const kMPBrazeConfigTriggerMinimumTimeInterval = @"triggerMinimumTimeInterval";
static NSString *const kMPBrazeConfigAutomaticLocationCollection = @"automaticLocationCollection";

@interface mParticle_BrazeTests : XCTestCase

@end
Expand Down Expand Up @@ -59,8 +64,7 @@ - (void)testStartwithSimpleConfig {

[braze didFinishLaunchingWithConfiguration:kitConfiguration];

NSDictionary *testOptionsDictionary = @{ABKEnableAutomaticLocationCollectionKey:@(YES),
ABKSDKFlavorKey:@7
NSDictionary *testOptionsDictionary = @{kMPBrazeConfigAutomaticLocationCollection:@(YES)
};

NSDictionary *optionsDictionary = [braze optionsDictionary];
Expand All @@ -82,12 +86,11 @@ - (void)testStartwithAdvancedConfig {

[braze didFinishLaunchingWithConfiguration:kitConfiguration];

NSDictionary *testOptionsDictionary = @{ABKEnableAutomaticLocationCollectionKey:@(YES),
ABKSDKFlavorKey:@7,
ABKRequestProcessingPolicyOptionKey: @(1),
ABKFlushIntervalOptionKey: @(2),
ABKSessionTimeoutKey: @(3),
ABKMinimumTriggerTimeIntervalKey: @(4)
NSDictionary *testOptionsDictionary = @{kMPBrazeConfigAutomaticLocationCollection:@(YES),
kMPBrazeConfigRequestPolicy: @(1),
kMPBrazeConfigFlushInterval: @(2),
kMPBrazeConfigSessionTimeout: @(3),
kMPBrazeConfigTriggerMinimumTimeInterval: @(4)
};

NSDictionary *optionsDictionary = [braze optionsDictionary];
Expand Down
1 change: 0 additions & 1 deletion Kits/braze/braze-14/mParticle-Braze-14.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,5 @@ Pod::Spec.new do |s|
s.resource_bundles = { 'mParticle-Braze-14-Privacy' => ['Sources/mParticle-Braze/PrivacyInfo.xcprivacy'] }
s.dependency 'mParticle-Apple-SDK', '~> 9.0'
s.dependency 'BrazeKit', '~> 14.0'
s.dependency 'BrazeKitCompat', '~> 14.0'
s.ios.dependency 'BrazeUI', '~> 14.0'
end
Loading