Skip to content

Commit 2f348b2

Browse files
authored
fix: Users attibutes email and push subscribe mapping (#103)
1 parent 1033ef6 commit 2f348b2

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

Sources/mParticle-Appboy/MPKitAppboy.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141

4242
// User Attribute key with reserved functionality for Braze kit
4343
static NSString *const brazeUserAttributeDob = @"dob";
44+
static NSString *const brazeUserAttributeEmailSubscribe = @"email_subscribe";
45+
static NSString *const brazeUserAttributePushSubscribe = @"push_subscribe";
4446

4547
// Strings used when sending enhanced commerce events
4648
static NSString *const attributesKey = @"Attributes";
@@ -796,6 +798,30 @@ - (MPKitExecStatus *)setUserAttribute:(NSString *)key value:(NSString *)value {
796798
[appboyInstance.user setPhoneNumber:value];
797799
} else if ([key isEqualToString:mParticleUserAttributeZip]){
798800
[appboyInstance.user setCustomAttributeWithKey:@"Zip" stringValue:value];
801+
} else if ([key isEqualToString:brazeUserAttributeEmailSubscribe]) {
802+
if([value isEqualToString:@"opted_in"]) {
803+
[appboyInstance.user setEmailSubscriptionState:BRZUserSubscriptionStateOptedIn];
804+
} else if ([value isEqualToString:@"unsubscribed"]) {
805+
[appboyInstance.user setEmailSubscriptionState:BRZUserSubscriptionStateUnsubscribed];
806+
} else if ([value isEqualToString:@"subscribed"]) {
807+
[appboyInstance.user setEmailSubscriptionState:BRZUserSubscriptionStateSubscribed];
808+
} else {
809+
NSLog(@"mParticle -> Invalid email_subscribe value: %@", value);
810+
execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceAppboy) returnCode:MPKitReturnCodeFail];
811+
return execStatus;
812+
}
813+
} else if ([key isEqualToString:brazeUserAttributePushSubscribe]) {
814+
if([value isEqualToString:@"opted_in"]) {
815+
[appboyInstance.user setPushNotificationSubscriptionState:BRZUserSubscriptionStateOptedIn];
816+
} else if ([value isEqualToString:@"unsubscribed"]) {
817+
[appboyInstance.user setPushNotificationSubscriptionState:BRZUserSubscriptionStateUnsubscribed];
818+
} else if ([value isEqualToString:@"subscribed"]) {
819+
[appboyInstance.user setPushNotificationSubscriptionState:BRZUserSubscriptionStateSubscribed];
820+
} else {
821+
NSLog(@"mParticle -> Invalid push_subscribe value: %@", value);
822+
execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceAppboy) returnCode:MPKitReturnCodeFail];
823+
return execStatus;
824+
}
799825
} else {
800826
key = [self stripCharacter:@"$" fromString:key];
801827

mParticle_AppboyTests/mParticle_AppboyTests.m

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ - (void)setEnableTypeDetection:(BOOL)enableTypeDetection;
1919
+ (BOOL)shouldDisableNotificationHandling;
2020
+ (Braze *)brazeInstance;
2121
+ (MPKitExecStatus *)updateUser:(FilteredMParticleUser *)user request:(NSDictionary<NSNumber *,NSString *> *)userIdentities;
22+
+ (MPKitExecStatus *)setUserAttribute:(NSString *)key value:(NSString *)value;
2223

2324
@end
2425

@@ -171,6 +172,69 @@ - (void)testMpidForwardingOnStartUserIdNegative {
171172
[mockKitInstance verify];
172173
}
173174

175+
- (void)testEmailSubscribtionUserAttribute {
176+
NSDictionary *kitConfiguration = @{@"apiKey":@"BrazeID",
177+
@"id":@42,
178+
@"ABKCollectIDFA":@"true",
179+
@"ABKRequestProcessingPolicyOptionKey": @"1",
180+
@"ABKFlushIntervalOptionKey":@"2",
181+
@"ABKSessionTimeoutKey":@"3",
182+
@"ABKMinimumTriggerTimeIntervalKey":@"4",
183+
@"userIdentificationType":@"MPID"
184+
};
185+
MPKitAppboy *kitInstance = [[MPKitAppboy alloc] init];
186+
[kitInstance didFinishLaunchingWithConfiguration:kitConfiguration];
187+
188+
BRZConfiguration *configuration = [[BRZConfiguration alloc] init];
189+
Braze *testClient = [[Braze alloc] initWithConfiguration:configuration];
190+
id mockClient = OCMPartialMock(testClient);
191+
[kitInstance setAppboyInstance:mockClient];
192+
XCTAssertEqualObjects(mockClient, [kitInstance appboyInstance]);
193+
194+
// Should succeed since opted_in is a valid value
195+
MPKitExecStatus *execStatus1 = [kitInstance setUserAttribute:@"email_subscribe" value:@"opted_in"];
196+
XCTAssertEqual(execStatus1.returnCode, MPKitReturnCodeSuccess);
197+
// Should fail since testValue is an invalid value
198+
MPKitExecStatus *execStatus2 = [kitInstance setUserAttribute:@"email_subscribe" value:@"testValue"];
199+
XCTAssertEqual(execStatus2.returnCode, MPKitReturnCodeFail);
200+
201+
[mockClient verify];
202+
203+
[mockClient stopMocking];
204+
}
205+
206+
- (void)testPushSubscribtionUserAttribute {
207+
NSDictionary *kitConfiguration = @{@"apiKey":@"BrazeID",
208+
@"id":@42,
209+
@"ABKCollectIDFA":@"true",
210+
@"ABKRequestProcessingPolicyOptionKey": @"1",
211+
@"ABKFlushIntervalOptionKey":@"2",
212+
@"ABKSessionTimeoutKey":@"3",
213+
@"ABKMinimumTriggerTimeIntervalKey":@"4",
214+
@"userIdentificationType":@"MPID"
215+
};
216+
MPKitAppboy *kitInstance = [[MPKitAppboy alloc] init];
217+
[kitInstance didFinishLaunchingWithConfiguration:kitConfiguration];
218+
219+
BRZConfiguration *configuration = [[BRZConfiguration alloc] init];
220+
Braze *testClient = [[Braze alloc] initWithConfiguration:configuration];
221+
id mockClient = OCMPartialMock(testClient);
222+
[kitInstance setAppboyInstance:mockClient];
223+
XCTAssertEqualObjects(mockClient, [kitInstance appboyInstance]);
224+
225+
// Should succeed since opted_in is a valid value
226+
MPKitExecStatus *execStatus1 = [kitInstance setUserAttribute:@"push_subscribe" value:@"opted_in"];
227+
XCTAssertEqual(execStatus1.returnCode, MPKitReturnCodeSuccess);
228+
// Should fail since testValue is an invalid value
229+
MPKitExecStatus *execStatus2 = [kitInstance setUserAttribute:@"push_subscribe" value:@"testValue"];
230+
XCTAssertEqual(execStatus2.returnCode, MPKitReturnCodeFail);
231+
232+
[mockClient verify];
233+
234+
[mockClient stopMocking];
235+
}
236+
237+
174238
//- (void)testEndpointOverride {
175239
// MPKitAppboy *appBoy = [[MPKitAppboy alloc] init];
176240
//
@@ -582,7 +646,7 @@ - (void)testlogPurchaseCommerceEvent {
582646
- (void)testlogPurchaseCommerceEventSendingProductName {
583647
MPKitAppboy *kit = [[MPKitAppboy alloc] init];
584648
kit.configuration = @{@"bundleCommerceEventData" : @0,
585-
@"forwardSkuAsProductName": @"True"};
649+
@"replaceSkuWithProductName": @"True"};
586650

587651
BRZConfiguration *configuration = [[BRZConfiguration alloc] init];
588652
Braze *testClient = [[Braze alloc] initWithConfiguration:configuration];

0 commit comments

Comments
 (0)