From ced66d6a2de1140ac3f2c34cd70db7358cc3a45c Mon Sep 17 00:00:00 2001 From: Ollie Silviotti Date: Tue, 2 Sep 2025 12:44:42 +0100 Subject: [PATCH 1/2] fix: remove userIdentities key expectation in native iOS logic --- ios/RNMParticle/RNMParticle.mm | 63 ++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/ios/RNMParticle/RNMParticle.mm b/ios/RNMParticle/RNMParticle.mm index a115567..67a412f 100644 --- a/ios/RNMParticle/RNMParticle.mm +++ b/ios/RNMParticle/RNMParticle.mm @@ -651,23 +651,25 @@ - (MPIdentityApiRequest *)MPIdentityApiRequestFromDict:(NSDictionary *)dict { } MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser]; - if (dict[@"userIdentities"] && dict[@"userIdentities"] != [NSNull null]) { - NSDictionary *identities = dict[@"userIdentities"]; - for (NSString *key in identities) { - MPIdentity identityType = (MPIdentity)[key integerValue]; - NSString *value = identities[key]; - [request setIdentity:value identityType:identityType]; + for (NSString *key in dict) { + id value = dict[key]; + if (value == [NSNull null]) { + continue; + } + + if ([key isEqualToString:@"email"]) { + request.email = (NSString *)value; + } else if ([key isEqualToString:@"customerId"]) { + request.customerId = (NSString *)value; + } else { + NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet]; + NSCharacterSet *keyCharacterSet = [NSCharacterSet characterSetWithCharactersInString:key]; + if ([numericSet isSupersetOfSet:keyCharacterSet]) { + MPIdentity identityType = (MPIdentity)[key integerValue]; + [request setIdentity:(NSString *)value identityType:identityType]; + } } } - - if (dict[@"customerId"] && dict[@"customerId"] != [NSNull null]) { - request.customerId = dict[@"customerId"]; - } - - if (dict[@"email"] && dict[@"email"] != [NSNull null]) { - request.email = dict[@"email"]; - } - return request; } @@ -1091,21 +1093,24 @@ + (MPIdentityApiRequest *)MPIdentityApiRequest:(id)json { NSDictionary *dict = json; MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser]; - if (dict[@"userIdentities"] && dict[@"userIdentities"] != [NSNull null]) { - NSDictionary *identities = dict[@"userIdentities"]; - for (NSString *key in identities) { - MPIdentity identityType = (MPIdentity)[key integerValue]; - NSString *value = identities[key]; - [request setIdentity:value identityType:identityType]; + for (NSString *key in dict) { + id value = dict[key]; + if (value == [NSNull null]) { + continue; + } + + if ([key isEqualToString:@"email"]) { + request.email = (NSString *)value; + } else if ([key isEqualToString:@"customerId"]) { + request.customerId = (NSString *)value; + } else { + NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet]; + NSCharacterSet *keyCharacterSet = [NSCharacterSet characterSetWithCharactersInString:key]; + if ([numericSet isSupersetOfSet:keyCharacterSet]) { + MPIdentity identityType = (MPIdentity)[key integerValue]; + [request setIdentity:(NSString *)value identityType:identityType]; + } } - } - - if (dict[@"customerId"] && dict[@"customerId"] != [NSNull null]) { - request.customerId = dict[@"customerId"]; - } - - if (dict[@"email"] && dict[@"email"] != [NSNull null]) { - request.email = dict[@"email"]; } return request; From 585c097880829bbae6b18d9c5925805dcc4d936d Mon Sep 17 00:00:00 2001 From: Ollie Silviotti Date: Tue, 2 Sep 2025 16:44:55 +0100 Subject: [PATCH 2/2] fix: address PR feedback --- ios/RNMParticle/RNMParticle.mm | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/ios/RNMParticle/RNMParticle.mm b/ios/RNMParticle/RNMParticle.mm index 67a412f..094b810 100644 --- a/ios/RNMParticle/RNMParticle.mm +++ b/ios/RNMParticle/RNMParticle.mm @@ -661,13 +661,9 @@ - (MPIdentityApiRequest *)MPIdentityApiRequestFromDict:(NSDictionary *)dict { request.email = (NSString *)value; } else if ([key isEqualToString:@"customerId"]) { request.customerId = (NSString *)value; - } else { - NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet]; - NSCharacterSet *keyCharacterSet = [NSCharacterSet characterSetWithCharactersInString:key]; - if ([numericSet isSupersetOfSet:keyCharacterSet]) { - MPIdentity identityType = (MPIdentity)[key integerValue]; - [request setIdentity:(NSString *)value identityType:identityType]; - } + } else if ([RNMParticle isNumericIdentityKey:key]) { + MPIdentity identityType = (MPIdentity)[key integerValue]; + [request setIdentity:(NSString *)value identityType:identityType]; } } return request; @@ -729,6 +725,17 @@ - (void)performIdentityRequest:(NSDictionary *)identityRequest callback:(RCTResp } #endif ++ (BOOL)isNumericIdentityKey:(NSString *)key { + static NSCharacterSet *numericSet = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + numericSet = [NSCharacterSet decimalDigitCharacterSet]; + }); + + NSCharacterSet *keyCharacterSet = [NSCharacterSet characterSetWithCharactersInString:key]; + return [numericSet isSupersetOfSet:keyCharacterSet]; +} + @end // RCTConvert category methods for mParticle types @@ -1089,6 +1096,7 @@ + (MPCommerceEventAction)MPCommerceEventAction:(NSNumber *)json { return action; } + + (MPIdentityApiRequest *)MPIdentityApiRequest:(id)json { NSDictionary *dict = json; MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser]; @@ -1103,13 +1111,9 @@ + (MPIdentityApiRequest *)MPIdentityApiRequest:(id)json { request.email = (NSString *)value; } else if ([key isEqualToString:@"customerId"]) { request.customerId = (NSString *)value; - } else { - NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet]; - NSCharacterSet *keyCharacterSet = [NSCharacterSet characterSetWithCharactersInString:key]; - if ([numericSet isSupersetOfSet:keyCharacterSet]) { - MPIdentity identityType = (MPIdentity)[key integerValue]; - [request setIdentity:(NSString *)value identityType:identityType]; - } + } else if ([RNMParticle isNumericIdentityKey:key]) { + MPIdentity identityType = (MPIdentity)[key integerValue]; + [request setIdentity:(NSString *)value identityType:identityType]; } }