Skip to content

Commit ebd6e7d

Browse files
fix: remove userIdentities key expectation in native iOS logic (#255)
Co-authored-by: James Newman <[email protected]>
1 parent 8f8e59e commit ebd6e7d

File tree

1 file changed

+36
-27
lines changed

1 file changed

+36
-27
lines changed

ios/RNMParticle/RNMParticle.mm

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -651,23 +651,21 @@ - (MPIdentityApiRequest *)MPIdentityApiRequestFromDict:(NSDictionary *)dict {
651651
}
652652
MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser];
653653

654-
if (dict[@"userIdentities"] && dict[@"userIdentities"] != [NSNull null]) {
655-
NSDictionary *identities = dict[@"userIdentities"];
656-
for (NSString *key in identities) {
654+
for (NSString *key in dict) {
655+
id value = dict[key];
656+
if (value == [NSNull null]) {
657+
continue;
658+
}
659+
660+
if ([key isEqualToString:@"email"]) {
661+
request.email = (NSString *)value;
662+
} else if ([key isEqualToString:@"customerId"]) {
663+
request.customerId = (NSString *)value;
664+
} else if ([RNMParticle isNumericIdentityKey:key]) {
657665
MPIdentity identityType = (MPIdentity)[key integerValue];
658-
NSString *value = identities[key];
659-
[request setIdentity:value identityType:identityType];
666+
[request setIdentity:(NSString *)value identityType:identityType];
660667
}
661668
}
662-
663-
if (dict[@"customerId"] && dict[@"customerId"] != [NSNull null]) {
664-
request.customerId = dict[@"customerId"];
665-
}
666-
667-
if (dict[@"email"] && dict[@"email"] != [NSNull null]) {
668-
request.email = dict[@"email"];
669-
}
670-
671669
return request;
672670
}
673671

@@ -727,6 +725,17 @@ - (void)performIdentityRequest:(NSDictionary *)identityRequest callback:(RCTResp
727725
}
728726
#endif
729727

728+
+ (BOOL)isNumericIdentityKey:(NSString *)key {
729+
static NSCharacterSet *numericSet = nil;
730+
static dispatch_once_t onceToken;
731+
dispatch_once(&onceToken, ^{
732+
numericSet = [NSCharacterSet decimalDigitCharacterSet];
733+
});
734+
735+
NSCharacterSet *keyCharacterSet = [NSCharacterSet characterSetWithCharactersInString:key];
736+
return [numericSet isSupersetOfSet:keyCharacterSet];
737+
}
738+
730739
@end
731740

732741
// RCTConvert category methods for mParticle types
@@ -1087,27 +1096,27 @@ + (MPCommerceEventAction)MPCommerceEventAction:(NSNumber *)json {
10871096
return action;
10881097
}
10891098

1099+
10901100
+ (MPIdentityApiRequest *)MPIdentityApiRequest:(id)json {
10911101
NSDictionary *dict = json;
10921102
MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser];
10931103

1094-
if (dict[@"userIdentities"] && dict[@"userIdentities"] != [NSNull null]) {
1095-
NSDictionary *identities = dict[@"userIdentities"];
1096-
for (NSString *key in identities) {
1104+
for (NSString *key in dict) {
1105+
id value = dict[key];
1106+
if (value == [NSNull null]) {
1107+
continue;
1108+
}
1109+
1110+
if ([key isEqualToString:@"email"]) {
1111+
request.email = (NSString *)value;
1112+
} else if ([key isEqualToString:@"customerId"]) {
1113+
request.customerId = (NSString *)value;
1114+
} else if ([RNMParticle isNumericIdentityKey:key]) {
10971115
MPIdentity identityType = (MPIdentity)[key integerValue];
1098-
NSString *value = identities[key];
1099-
[request setIdentity:value identityType:identityType];
1116+
[request setIdentity:(NSString *)value identityType:identityType];
11001117
}
11011118
}
11021119

1103-
if (dict[@"customerId"] && dict[@"customerId"] != [NSNull null]) {
1104-
request.customerId = dict[@"customerId"];
1105-
}
1106-
1107-
if (dict[@"email"] && dict[@"email"] != [NSNull null]) {
1108-
request.email = dict[@"email"];
1109-
}
1110-
11111120
return request;
11121121
}
11131122

0 commit comments

Comments
 (0)