Skip to content

Commit 827bb15

Browse files
feat: map selected identity 'emailsha256'
1 parent 7f8a144 commit 827bb15

3 files changed

Lines changed: 32 additions & 11 deletions

File tree

android-kit-base/src/main/java/com/mparticle/kits/KitConfiguration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class KitConfiguration {
6262
private final static String KEY_CONSENT_FORWARDING_RULES_VALUE_HASH = "h";
6363
private final static String KEY_EXCLUDE_ANONYMOUS_USERS = "eau";
6464
private final static String KEY_PLACEMENT_ATTRIBUTES_MAPPING = "placementAttributesMapping";
65+
private final static String KEY_HASHED_EMAIL_IDENTITY_TYPE= "hashedEmailUserIdentityType";
6566

6667
//If set to true, our sdk honor user's optout wish. If false, we still collect data on opt-ed out users, but only for reporting.
6768
private final static String HONOR_OPT_OUT = "honorOptOut";
@@ -995,6 +996,10 @@ public JSONArray getPlacementAttributesMapping() throws JSONException {
995996
return new JSONArray(jsonArrayStr);
996997
}
997998

999+
public String getHashedEmailUserIdentityType() {
1000+
return settings.get(KEY_HASHED_EMAIL_IDENTITY_TYPE);
1001+
}
1002+
9981003
boolean shouldSetIdentity(MParticle.IdentityType identityType) {
9991004
SparseBooleanArray userIdentityFilters = getUserIdentityFilters();
10001005
return userIdentityFilters == null ||

android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,7 +1364,8 @@ public void execute(@NonNull String viewName,
13641364
String email = getValueIgnoreCase(attributes, "email");
13651365
String hashedEmail = getValueIgnoreCase(attributes, "emailsha256");
13661366
Map<String, String> tempAttributes = attributes;
1367-
confirmEmail(email, hashedEmail, user, instance.Identity(), () -> {
1367+
KitConfiguration kitConfig = provider.getConfiguration();
1368+
confirmEmail(email, hashedEmail, user, instance.Identity(), kitConfig, () -> {
13681369
Map<String, String> finalAttributes = prepareAttributes(provider, tempAttributes, user);
13691370

13701371
((KitIntegration.RoktListener) provider).execute(viewName,
@@ -1497,7 +1498,8 @@ public void prepareAttributesAsync(@NonNull Map<String, String> attributes) {
14971498
String email = attributes.get("email");
14981499
String hashedEmail = getValueIgnoreCase(attributes, "emailsha256");
14991500
Map<String, String> tempAttributes = attributes;
1500-
confirmEmail(email, hashedEmail, user, instance.Identity(), () -> {
1501+
KitConfiguration kitConfig = provider.getConfiguration();
1502+
confirmEmail(email, hashedEmail, user, instance.Identity(), kitConfig, () -> {
15011503
Map<String, String> finalAttributes = prepareAttributes(provider, tempAttributes, user);
15021504
((KitIntegration.RoktListener) provider).enrichAttributes(
15031505
finalAttributes, FilteredMParticleUser.getInstance(user.getId(), provider));
@@ -1514,6 +1516,7 @@ private void confirmEmail(
15141516
@Nullable String hashedEmail,
15151517
@Nullable MParticleUser user,
15161518
IdentityApi identityApi,
1519+
KitConfiguration kitConfiguration,
15171520
Runnable runnable
15181521
) {
15191522
boolean hasEmail = email != null && !email.isEmpty();
@@ -1550,8 +1553,14 @@ else if (hashedEmailMismatch && existingHashedEmail != null) {
15501553
if (emailMismatch) {
15511554
identityBuilder.email(email);
15521555
}
1553-
if (hashedEmailMismatch) {
1554-
identityBuilder.userIdentity(MParticle.IdentityType.Other, hashedEmail);
1556+
if (hashedEmailMismatch && kitConfiguration != null && kitConfiguration.getHashedEmailUserIdentityType() != null) {
1557+
MParticle.IdentityType type;
1558+
try {
1559+
type = MParticle.IdentityType.valueOf(kitConfiguration.getHashedEmailUserIdentityType());
1560+
} catch (IllegalArgumentException e) {
1561+
type = MParticle.IdentityType.Other; // fallback
1562+
}
1563+
identityBuilder.userIdentity(type, hashedEmail);
15551564
}
15561565

15571566
IdentityApiRequest identityRequest = identityBuilder.build();

android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,10 +1105,11 @@ class KitManagerImplTest {
11051105
String::class.java,
11061106
MParticleUser::class.java,
11071107
IdentityApi::class.java,
1108+
KitConfiguration::class.java,
11081109
Runnable::class.java
11091110
)
11101111
method.isAccessible = true
1111-
val result = method.invoke(manager, "Test@gmail.com", "", user, identityApi, runnable)
1112+
val result = method.invoke(manager, "Test@gmail.com", "", user, identityApi, mockedKitConfig, runnable)
11121113
verify(mockTask).addSuccessListener(any())
11131114
}
11141115

@@ -1153,10 +1154,11 @@ class KitManagerImplTest {
11531154
String::class.java,
11541155
MParticleUser::class.java,
11551156
IdentityApi::class.java,
1157+
KitConfiguration::class.java,
11561158
Runnable::class.java
11571159
)
11581160
method.isAccessible = true
1159-
val result = method.invoke(manager, "Test@gmail.com", null, user, identityApi, runnable)
1161+
val result = method.invoke(manager, "Test@gmail.com", null, user, identityApi, mockedKitConfig, runnable)
11601162
verify(runnable).run()
11611163
}
11621164

@@ -1201,10 +1203,11 @@ class KitManagerImplTest {
12011203
String::class.java,
12021204
MParticleUser::class.java,
12031205
IdentityApi::class.java,
1206+
KitConfiguration::class.java,
12041207
Runnable::class.java
12051208
)
12061209
method.isAccessible = true
1207-
val result = method.invoke(manager, null, null, user, identityApi, runnable)
1210+
val result = method.invoke(manager, null, null, user, identityApi, mockedKitConfig, runnable)
12081211
verify(runnable).run()
12091212
}
12101213

@@ -1249,10 +1252,11 @@ class KitManagerImplTest {
12491252
String::class.java,
12501253
MParticleUser::class.java,
12511254
IdentityApi::class.java,
1255+
KitConfiguration::class.java,
12521256
Runnable::class.java
12531257
)
12541258
method.isAccessible = true
1255-
val result = method.invoke(manager, "", "", user, identityApi, runnable)
1259+
val result = method.invoke(manager, "", "", user, identityApi, mockedKitConfig, runnable)
12561260
verify(runnable).run()
12571261
}
12581262

@@ -1297,10 +1301,11 @@ class KitManagerImplTest {
12971301
String::class.java,
12981302
MParticleUser::class.java,
12991303
IdentityApi::class.java,
1304+
KitConfiguration::class.java,
13001305
Runnable::class.java
13011306
)
13021307
method.isAccessible = true
1303-
val result = method.invoke(manager, "", "hashed_Test@gmail.com", user, identityApi, runnable)
1308+
val result = method.invoke(manager, "", "hashed_Test@gmail.com", user, identityApi, mockedKitConfig, runnable)
13041309
verify(mockTask).addSuccessListener(any())
13051310
}
13061311

@@ -1345,10 +1350,11 @@ class KitManagerImplTest {
13451350
String::class.java,
13461351
MParticleUser::class.java,
13471352
IdentityApi::class.java,
1353+
KitConfiguration::class.java,
13481354
Runnable::class.java
13491355
)
13501356
method.isAccessible = true
1351-
val result = method.invoke(manager, null, "hashed_Test@gmail.com", user, identityApi, runnable)
1357+
val result = method.invoke(manager, null, "hashed_Test@gmail.com", user, identityApi, mockedKitConfig, runnable)
13521358
verify(runnable).run()
13531359
}
13541360

@@ -1393,10 +1399,11 @@ class KitManagerImplTest {
13931399
String::class.java,
13941400
MParticleUser::class.java,
13951401
IdentityApi::class.java,
1402+
KitConfiguration::class.java,
13961403
Runnable::class.java
13971404
)
13981405
method.isAccessible = true
1399-
val result = method.invoke(manager, null, null, user, identityApi, runnable)
1406+
val result = method.invoke(manager, null, null, user, identityApi, mockedKitConfig, runnable)
14001407
verify(runnable).run()
14011408
}
14021409

0 commit comments

Comments
 (0)