diff --git a/ios/RNMParticle/RNMParticle.mm b/ios/RNMParticle/RNMParticle.mm index a115567..094b810 100644 --- a/ios/RNMParticle/RNMParticle.mm +++ b/ios/RNMParticle/RNMParticle.mm @@ -651,23 +651,21 @@ - (MPIdentityApiRequest *)MPIdentityApiRequestFromDict:(NSDictionary *)dict { } MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser]; - if (dict[@"userIdentities"] && dict[@"userIdentities"] != [NSNull null]) { - NSDictionary *identities = dict[@"userIdentities"]; - for (NSString *key in identities) { + 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 if ([RNMParticle isNumericIdentityKey:key]) { MPIdentity identityType = (MPIdentity)[key integerValue]; - NSString *value = identities[key]; - [request setIdentity:value identityType:identityType]; + [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; } @@ -727,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 @@ -1087,27 +1096,27 @@ + (MPCommerceEventAction)MPCommerceEventAction:(NSNumber *)json { return action; } + + (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) { + 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 if ([RNMParticle isNumericIdentityKey:key]) { MPIdentity identityType = (MPIdentity)[key integerValue]; - NSString *value = identities[key]; - [request setIdentity:value identityType:identityType]; + [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; }