From d6fe0ae38231a9a27320e57665e5251915ea3ec1 Mon Sep 17 00:00:00 2001 From: Brandon Stalnaker Date: Wed, 30 Jul 2025 13:54:02 -0400 Subject: [PATCH 1/3] feat: Update Hashed Email for Rokt --- mParticle-Rokt/MPKitRokt.m | 15 ++------------- mParticle_RoktTests/mParticle_RoktTests.m | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/mParticle-Rokt/MPKitRokt.m b/mParticle-Rokt/MPKitRokt.m index f03f97b..981647e 100644 --- a/mParticle-Rokt/MPKitRokt.m +++ b/mParticle-Rokt/MPKitRokt.m @@ -334,22 +334,11 @@ + (void)addIdentityAttributes:(NSMutableDictionary * _Nu + (void)handleHashedEmail:(NSMutableDictionary * _Nullable)attributes { NSString *emailKey = [MPKitRokt stringForIdentityType:MPIdentityEmail]; - NSString *otherKey = [MPKitRokt stringForIdentityType:MPIdentityOther]; NSString *hashedEmailValue = attributes[@"emailsha256"]; - // Remove email and other is hashed vlaue already set + // Remove email if hashed value set if (hashedEmailValue != nil) { [attributes removeObjectForKey:emailKey]; - [attributes removeObjectForKey:otherKey]; - } - - NSString *otherValue = attributes[otherKey]; - - // Remove email and replace key on other if it's set - if (otherValue != nil) { - [attributes removeObjectForKey:emailKey]; - attributes[@"emailsha256"] = otherValue; - [attributes removeObjectForKey:otherKey]; } } @@ -393,7 +382,7 @@ + (NSString *)stringForIdentityType:(MPIdentity)identityType { return @"microsoft"; case MPIdentityOther: - return @"other"; + return @"emailsha256"; case MPIdentityTwitter: return @"twitter"; diff --git a/mParticle_RoktTests/mParticle_RoktTests.m b/mParticle_RoktTests/mParticle_RoktTests.m index b4e7b5c..5e92d94 100644 --- a/mParticle_RoktTests/mParticle_RoktTests.m +++ b/mParticle_RoktTests/mParticle_RoktTests.m @@ -244,7 +244,8 @@ - (void)testAddIdentityAttributes { XCTAssertEqualObjects(passedAttributes[@"facebookcustomaudienceid"], @"testCustomAudienceID"); XCTAssertEqualObjects(passedAttributes[@"google"], @"testGoogle"); XCTAssertEqualObjects(passedAttributes[@"microsoft"], @"testMicrosoft"); - XCTAssertEqualObjects(passedAttributes[@"other"], @"testOther"); + XCTAssertNil(passedAttributes[@"other"]); + XCTAssertEqualObjects(passedAttributes[@"emailsha256"], @"testOther"); XCTAssertEqualObjects(passedAttributes[@"twitter"], @"testTwitter"); XCTAssertEqualObjects(passedAttributes[@"yahoo"], @"testYahoo"); XCTAssertEqualObjects(passedAttributes[@"other2"], @"testOther2"); @@ -307,7 +308,8 @@ - (void)testAddIdentityAttributesWithExistingAttributes { XCTAssertEqualObjects(passedAttributes[@"facebookcustomaudienceid"], @"testCustomAudienceID"); XCTAssertEqualObjects(passedAttributes[@"google"], @"testGoogle"); XCTAssertEqualObjects(passedAttributes[@"microsoft"], @"testMicrosoft"); - XCTAssertEqualObjects(passedAttributes[@"other"], @"testOther"); + XCTAssertNil(passedAttributes[@"other"]); + XCTAssertEqualObjects(passedAttributes[@"emailsha256"], @"testOther"); XCTAssertEqualObjects(passedAttributes[@"twitter"], @"testTwitter"); XCTAssertEqualObjects(passedAttributes[@"yahoo"], @"testYahoo"); XCTAssertEqualObjects(passedAttributes[@"other2"], @"testOther2"); @@ -504,10 +506,10 @@ - (void)testHandleHashedEmailOtherOverride { [MPKitRokt handleHashedEmail:passedAttributes]; - XCTAssertNil(passedAttributes[@"email"]); - XCTAssertNil(passedAttributes[@"other"]); - XCTAssertEqualObjects(passedAttributes[@"emailsha256"], @"test@gmail.com"); - XCTAssertTrue(passedAttributes.allKeys.count == 1); + XCTAssertEqualObjects(passedAttributes[@"email"], @"foo@gmail.com"); + XCTAssertEqualObjects(passedAttributes[@"other"], @"test@gmail.com"); + XCTAssertNil(passedAttributes[@"emailsha256"]); + XCTAssertTrue(passedAttributes.allKeys.count == 2); } - (void)testHandleHashedEmailHashedOverride { @@ -519,9 +521,9 @@ - (void)testHandleHashedEmailHashedOverride { [MPKitRokt handleHashedEmail:passedAttributes]; XCTAssertNil(passedAttributes[@"email"]); - XCTAssertNil(passedAttributes[@"other"]); + XCTAssertEqualObjects(passedAttributes[@"other"], @"test@gmail.com"); XCTAssertEqualObjects(passedAttributes[@"emailsha256"], @"test2@gmail.com"); - XCTAssertTrue(passedAttributes.allKeys.count == 1); + XCTAssertTrue(passedAttributes.allKeys.count == 2); } - (void)testTransformValuesToString { From e17d2e70ab405dd5a32121a2eb2dee9677cb8056 Mon Sep 17 00:00:00 2001 From: Brandon Stalnaker <33703490+BrandonStalnaker@users.noreply.github.com> Date: Wed, 30 Jul 2025 15:44:25 -0400 Subject: [PATCH 2/3] Add comment from nitpick --- mParticle-Rokt/MPKitRokt.m | 1 + 1 file changed, 1 insertion(+) diff --git a/mParticle-Rokt/MPKitRokt.m b/mParticle-Rokt/MPKitRokt.m index 981647e..5586484 100644 --- a/mParticle-Rokt/MPKitRokt.m +++ b/mParticle-Rokt/MPKitRokt.m @@ -382,6 +382,7 @@ + (NSString *)stringForIdentityType:(MPIdentity)identityType { return @"microsoft"; case MPIdentityOther: + // As of 7/30/2025, "MPIdentityOther" is used by Rokt customers to identify based off hashed email return @"emailsha256"; case MPIdentityTwitter: From dbd6b1727cf27a4369ef973d8d9e52a657d47d04 Mon Sep 17 00:00:00 2001 From: Brandon Stalnaker Date: Wed, 30 Jul 2025 16:14:40 -0400 Subject: [PATCH 3/3] test nitpick 2 --- mParticle_RoktTests/mParticle_RoktTests.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mParticle_RoktTests/mParticle_RoktTests.m b/mParticle_RoktTests/mParticle_RoktTests.m index 5e92d94..61a59f4 100644 --- a/mParticle_RoktTests/mParticle_RoktTests.m +++ b/mParticle_RoktTests/mParticle_RoktTests.m @@ -515,13 +515,13 @@ - (void)testHandleHashedEmailOtherOverride { - (void)testHandleHashedEmailHashedOverride { NSMutableDictionary *passedAttributes = [[NSMutableDictionary alloc] init]; [passedAttributes setObject:@"foo@gmail.com" forKey:@"email"]; - [passedAttributes setObject:@"test@gmail.com" forKey:@"other"]; + [passedAttributes setObject:@"foo-value" forKey:@"other"]; [passedAttributes setObject:@"test2@gmail.com" forKey:@"emailsha256"]; [MPKitRokt handleHashedEmail:passedAttributes]; XCTAssertNil(passedAttributes[@"email"]); - XCTAssertEqualObjects(passedAttributes[@"other"], @"test@gmail.com"); + XCTAssertEqualObjects(passedAttributes[@"other"], @"foo-value"); XCTAssertEqualObjects(passedAttributes[@"emailsha256"], @"test2@gmail.com"); XCTAssertTrue(passedAttributes.allKeys.count == 2); }