Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
2 changes: 0 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ let package = Package(
.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"),
],
resources: [.process("PrivacyInfo.xcprivacy")]
),
Expand All @@ -40,7 +39,6 @@ let package = Package(
.product(name: "mParticle-Apple-SDK-NoLocation", 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"),
],
path: "SPM/mParticle-Appboy-NoLocation",
resources: [.process("PrivacyInfo.xcprivacy")]
Expand Down
46 changes: 20 additions & 26 deletions Sources/mParticle-Appboy/MPKitAppboy.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 (replaces BrazeKitCompat ABK* constants for Full Migration)
Comment thread
rmi22186 marked this conversation as resolved.
Outdated
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,19 @@ - (id const)providerKitInstance {
- (void)start {
if (!self->appboyInstance) {
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;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

sdkFlavor is removed because we already have configuration.api addSDKMetadata:@[BRZSDKMetadata.mparticle which is the more current way of telling Braze that it is being implemented via mParticle

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.

We actually still have references to Flavor in a few dashboards, even though you are right that the "SDK Metadata" is preferred

Can you add a line to continue sending the flavor to Braze:

configuration.api.sdkFlavor = BRZSDKFlavorMparticle;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

sounds good. I'll add these back

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.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.sessionTimeout = ((NSNumber *)optionsDict[kMPBrazeConfigSessionTimeout]).doubleValue;

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

NSNumber *automaticLocationTrackingOption = (NSNumber *)optionsDict[ABKEnableAutomaticLocationCollectionKey];
NSNumber *automaticLocationTrackingOption = (NSNumber *)optionsDict[kMPBrazeConfigAutomaticLocationCollection];
if (automaticLocationTrackingOption != nil && automaticLocationTrackingOption.boolValue && brazeLocationProvider) {
configuration.location.automaticLocationCollection = YES;
configuration.location.brazeLocationProvider = brazeLocationProvider;
Expand Down Expand Up @@ -445,7 +450,7 @@ - (void)stop {

- (NSMutableDictionary<NSString *, NSObject *> *)optionsDictionary {
NSArray <NSString *> *serverKeys = @[@"ABKRequestProcessingPolicyOptionKey", @"ABKFlushIntervalOptionKey", @"ABKSessionTimeoutKey", @"ABKMinimumTriggerTimeIntervalKey"];
Comment thread
rmi22186 marked this conversation as resolved.
NSArray <NSString *> *appboyKeys = @[ABKRequestProcessingPolicyOptionKey, ABKFlushIntervalOptionKey, ABKSessionTimeoutKey, ABKMinimumTriggerTimeIntervalKey];
NSArray <NSString *> *configKeys = @[kMPBrazeConfigRequestPolicy, kMPBrazeConfigFlushInterval, kMPBrazeConfigSessionTimeout, kMPBrazeConfigTriggerMinimumTimeInterval];
NSMutableDictionary<NSString *, NSObject *> *optionsDictionary = [[NSMutableDictionary alloc] initWithCapacity:serverKeys.count];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterNoStyle;
Expand All @@ -454,42 +459,31 @@ - (void)stop {
NSString *optionValue = self.configuration[serverKey];

if (optionValue != nil && (NSNull *)optionValue != [NSNull null]) {
NSString *appboyKey = appboyKeys[idx];
NSNumber *numberValue = nil;
@try {
numberValue = [numberFormatter numberFromString:optionValue];
} @catch (NSException *exception) {
numberValue = nil;
}
if (numberValue != nil) {
optionsDictionary[appboyKey] = 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);
#pragma clang diagnostic pop


#if TARGET_OS_IOS
optionsDictionary[ABKEnableAutomaticLocationCollectionKey] = @(YES);
optionsDictionary[kMPBrazeConfigAutomaticLocationCollection] = @(YES);
if (self.configuration[@"ABKDisableAutomaticLocationCollectionKey"]) {
Comment thread
rmi22186 marked this conversation as resolved.
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
2 changes: 0 additions & 2 deletions mParticle-Appboy.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,13 @@ Pod::Spec.new do |s|
s.ios.resource_bundles = { 'mParticle-Appboy-Privacy' => ['Sources/mParticle-Appboy/PrivacyInfo.xcprivacy'] }
s.ios.dependency 'mParticle-Apple-SDK', '~> 8.19'
s.ios.dependency 'BrazeKit', '~> 14.0'
s.ios.dependency 'BrazeKitCompat', '~> 14.0'
s.ios.dependency 'BrazeUI', '~> 14.0'

s.tvos.deployment_target = "12.0"
s.tvos.source_files = 'Sources/**/*.{h,m,mm}'
s.tvos.resource_bundles = { 'mParticle-Appboy-Privacy' => ['Sources/mParticle-Appboy/PrivacyInfo.xcprivacy'] }
s.tvos.dependency 'mParticle-Apple-SDK', '~> 8.19'
s.tvos.dependency 'BrazeKit', '~> 14.0'
s.tvos.dependency 'BrazeKitCompat', '~> 14.0'


end
27 changes: 1 addition & 26 deletions mParticle-Appboy.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@
539B2E952A13D62200C8339D /* OCMock in Frameworks */ = {isa = PBXBuildFile; productRef = 539B2E942A13D62200C8339D /* OCMock */; };
539B2E982A13D66300C8339D /* mParticle-Apple-SDK in Frameworks */ = {isa = PBXBuildFile; productRef = 539B2E972A13D66300C8339D /* mParticle-Apple-SDK */; };
539B2E9A2A13D66A00C8339D /* mParticle-Apple-SDK in Frameworks */ = {isa = PBXBuildFile; productRef = 539B2E992A13D66A00C8339D /* mParticle-Apple-SDK */; };
539B2E9D2A13D69F00C8339D /* BrazeKitCompat in Frameworks */ = {isa = PBXBuildFile; productRef = 539B2E9C2A13D69F00C8339D /* BrazeKitCompat */; };
539B2E9F2A13D69F00C8339D /* BrazeUI in Frameworks */ = {isa = PBXBuildFile; productRef = 539B2E9E2A13D69F00C8339D /* BrazeUI */; };
539B2EA12A13D6AB00C8339D /* BrazeKitCompat in Frameworks */ = {isa = PBXBuildFile; productRef = 539B2EA02A13D6AB00C8339D /* BrazeKitCompat */; };
D31A98A92153F73400358293 /* mParticle_AppboyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D31A98A82153F73400358293 /* mParticle_AppboyTests.m */; };
D31A98AB2153F73400358293 /* mParticle_Appboy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB94016C1CB703F2007ABB18 /* mParticle_Appboy.framework */; };
D34423302B960F44006CD046 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = D344232F2B960F44006CD046 /* PrivacyInfo.xcprivacy */; };
Expand Down Expand Up @@ -96,7 +94,6 @@
files = (
5387EC022A18051200219E89 /* BrazeKit in Frameworks */,
539B2E9F2A13D69F00C8339D /* BrazeUI in Frameworks */,
539B2E9D2A13D69F00C8339D /* BrazeKitCompat in Frameworks */,
539B2E982A13D66300C8339D /* mParticle-Apple-SDK in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand All @@ -105,7 +102,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
539B2EA12A13D6AB00C8339D /* BrazeKitCompat in Frameworks */,
539B2E9A2A13D66A00C8339D /* mParticle-Apple-SDK in Frameworks */,
5387EC002A18050500219E89 /* BrazeKit in Frameworks */,
);
Expand Down Expand Up @@ -285,7 +281,6 @@
name = "mParticle-Appboy";
packageProductDependencies = (
539B2E972A13D66300C8339D /* mParticle-Apple-SDK */,
539B2E9C2A13D69F00C8339D /* BrazeKitCompat */,
539B2E9E2A13D69F00C8339D /* BrazeUI */,
5387EC012A18051200219E89 /* BrazeKit */,
);
Expand All @@ -309,7 +304,6 @@
name = "mParticle-Appboy-tvOS";
packageProductDependencies = (
539B2E992A13D66A00C8339D /* mParticle-Apple-SDK */,
539B2EA02A13D6AB00C8339D /* BrazeKitCompat */,
5387EBFF2A18050500219E89 /* BrazeKit */,
);
productName = "mParticle-Appboy-tvOS";
Expand Down Expand Up @@ -450,10 +444,6 @@
target = 531861FB2A13E147006FFE90 /* AppboyTestHost */;
targetProxy = 531862102A13E17D006FFE90 /* PBXContainerItemProxy */;
};
539B2EA32A13D94E00C8339D /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
productRef = 539B2EA22A13D94E00C8339D /* BrazeKitCompat */;
};
539B2EA52A13D95200C8339D /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
productRef = 539B2EA42A13D95200C8339D /* BrazeUI */;
Expand Down Expand Up @@ -921,7 +911,7 @@
repositoryURL = "https://github.com/braze-inc/braze-swift-sdk";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 9.0.0;
minimumVersion = 14.0.0;
};
};
/* End XCRemoteSwiftPackageReference section */
Expand Down Expand Up @@ -952,26 +942,11 @@
package = 539B2E962A13D66300C8339D /* XCRemoteSwiftPackageReference "mparticle-apple-sdk" */;
productName = "mParticle-Apple-SDK";
};
539B2E9C2A13D69F00C8339D /* BrazeKitCompat */ = {
isa = XCSwiftPackageProductDependency;
package = 539B2E9B2A13D69F00C8339D /* XCRemoteSwiftPackageReference "braze-swift-sdk" */;
productName = BrazeKitCompat;
};
539B2E9E2A13D69F00C8339D /* BrazeUI */ = {
isa = XCSwiftPackageProductDependency;
package = 539B2E9B2A13D69F00C8339D /* XCRemoteSwiftPackageReference "braze-swift-sdk" */;
productName = BrazeUI;
};
539B2EA02A13D6AB00C8339D /* BrazeKitCompat */ = {
isa = XCSwiftPackageProductDependency;
package = 539B2E9B2A13D69F00C8339D /* XCRemoteSwiftPackageReference "braze-swift-sdk" */;
productName = BrazeKitCompat;
};
539B2EA22A13D94E00C8339D /* BrazeKitCompat */ = {
isa = XCSwiftPackageProductDependency;
package = 539B2E9B2A13D69F00C8339D /* XCRemoteSwiftPackageReference "braze-swift-sdk" */;
productName = BrazeKitCompat;
};
539B2EA42A13D95200C8339D /* BrazeUI */ = {
isa = XCSwiftPackageProductDependency;
package = 539B2E9B2A13D69F00C8339D /* XCRemoteSwiftPackageReference "braze-swift-sdk" */;
Expand Down
25 changes: 14 additions & 11 deletions mParticle_AppboyTests/mParticle_AppboyTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
@import XCTest;
@import OCMock;
#if TARGET_OS_IOS
@import BrazeKitCompat;
@import BrazeUI;
#else
@import BrazeKitCompat;
#endif

// Keys matching MPKitAppboy optionsDictionary (Braze Full Migration - no BrazeKitCompat)
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 MPKitAppboy ()

- (Braze *)appboyInstance;
Expand Down Expand Up @@ -50,8 +55,7 @@ - (void)testStartwithSimpleConfig {

[appBoy didFinishLaunchingWithConfiguration:kitConfiguration];

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

NSDictionary *optionsDictionary = [appBoy optionsDictionary];
Expand All @@ -73,12 +77,11 @@ - (void)testStartwithAdvancedConfig {

[appBoy didFinishLaunchingWithConfiguration:kitConfiguration];

NSDictionary *testOptionsDictionary = @{ABKEnableAutomaticLocationCollectionKey:@(YES),
ABKSDKFlavorKey:@7,
@"ABKRquestProcessingPolicy": @(1),
@"ABKFlushInterval":@(2),
@"ABKSessionTimeout":@(3),
@"ABKMinimumTriggerTimeInterval":@(4)
NSDictionary *testOptionsDictionary = @{kMPBrazeConfigAutomaticLocationCollection: @(YES),
kMPBrazeConfigRequestPolicy: @(1),
kMPBrazeConfigFlushInterval: @(2),
kMPBrazeConfigSessionTimeout: @(3),
kMPBrazeConfigTriggerMinimumTimeInterval: @(4)
};

NSDictionary *optionsDictionary = [appBoy optionsDictionary];
Expand Down