Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,13 @@ public void close() {
}
}

@Override
public void prepareAttributesAsync(@NonNull Map<String, String> attributes) {
if (mKitManager != null) {
mKitManager.prepareAttributesAsync(attributes);
}
}

static class CoreCallbacksImpl implements CoreCallbacks {
KitFrameworkWrapper mKitFrameworkWrapper;
ConfigManager mConfigManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ void execute(@NonNull String identifier,

void close();

void prepareAttributesAsync(@NonNull Map<String, String> attributes);

enum KitStatus {
NOT_CONFIGURED,
STOPPED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,8 @@ void execute(@NonNull String viewName,

Flow<RoktEvent> events(@NonNull String identifier);

void enrichAttributes(
@NonNull Map<String, String> attributes, @Nullable FilteredMParticleUser user);
/**
* Set the SDK version of the mParticle SDK.
* This should match the value set in MParticle.getWrapperSdkVersion()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,8 @@
import com.mparticle.identity.IdentityApi;
import com.mparticle.identity.IdentityApiRequest;
import com.mparticle.identity.IdentityApiResult;
import com.mparticle.identity.IdentityHttpResponse;
import com.mparticle.identity.IdentityStateListener;
import com.mparticle.identity.MParticleUser;
import com.mparticle.identity.TaskFailureListener;
import com.mparticle.identity.TaskSuccessListener;
import com.mparticle.internal.Constants;
import com.mparticle.internal.CoreCallbacks;
import com.mparticle.internal.KitManager;
Expand Down Expand Up @@ -1366,41 +1363,9 @@ public void execute(@NonNull String viewName,
MParticleUser user = instance.Identity().getCurrentUser();
String email = getValueIgnoreCase(attributes, "email");
String hashedEmail = getValueIgnoreCase(attributes, "emailsha256");
Map<String, String> finalAttributes = attributes;
Map<String, String> tempAttributes = attributes;
confirmEmail(email, hashedEmail, user, instance.Identity(), () -> {
JSONArray jsonArray = new JSONArray();

KitConfiguration kitConfig = provider.getConfiguration();
if (kitConfig != null) {
try {
jsonArray = kitConfig.getPlacementAttributesMapping();
} catch (JSONException e) {
Logger.warning("Invalid placementAttributes for kit: " + provider.getName() + " JSON: " + e.getMessage());
}
}
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.optJSONObject(i);
if (obj == null) continue;
String mapFrom = obj.optString("map");
String mapTo = obj.optString("value");
if (finalAttributes.containsKey(mapFrom)) {
String value = finalAttributes.remove(mapFrom);
finalAttributes.put(mapTo, value);
}
}
Map<String, Object> objectAttributes = new HashMap<>();
for (Map.Entry<String, String> entry : finalAttributes.entrySet()) {
if (!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
objectAttributes.put(entry.getKey(), entry.getValue());
}
}
if (user != null) {
user.setUserAttributes(objectAttributes);
}

if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, Objects.toString(MPUtility.isDevEnv(), "false")); // Default value is "false" if null
}
Map<String, String> finalAttributes = prepareAttributes(provider, tempAttributes, user);

((KitIntegration.RoktListener) provider).execute(viewName,
finalAttributes,
Expand All @@ -1426,6 +1391,43 @@ private String getValueIgnoreCase(Map<String, String> map, String searchKey) {
return null;
}

private Map<String, String> prepareAttributes(KitIntegration provider, Map<String, String> finalAttributes, MParticleUser user){
JSONArray jsonArray = new JSONArray();

KitConfiguration kitConfig = provider.getConfiguration();
if (kitConfig != null) {
try {
jsonArray = kitConfig.getPlacementAttributesMapping();
} catch (JSONException e) {
Logger.warning("Invalid placementAttributes for kit: " + provider.getName() + " JSON: " + e.getMessage());
}
}
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.optJSONObject(i);
if (obj == null) continue;
String mapFrom = obj.optString("map");
String mapTo = obj.optString("value");
if (finalAttributes.containsKey(mapFrom)) {
String value = finalAttributes.remove(mapFrom);
finalAttributes.put(mapTo, value);
}
}
Map<String, Object> objectAttributes = new HashMap<>();
for (Map.Entry<String, String> entry : finalAttributes.entrySet()) {
if(!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
objectAttributes.put(entry.getKey(), entry.getValue());
}
}
if (user != null) {
user.setUserAttributes(objectAttributes);
}

if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, String.valueOf(Objects.toString(MPUtility.isDevEnv(), "false"))); // Default value is "false" if null
}
return finalAttributes;
}

@Override
public Flow<RoktEvent> events(@NonNull String identifier) {
for (KitIntegration provider : providers.values()) {
Expand Down Expand Up @@ -1481,6 +1483,32 @@ public void close() {
}
}

@Override
public void prepareAttributesAsync(@NonNull Map<String, String> attributes) {

for (KitIntegration provider : providers.values()) {
try {
if (provider instanceof KitIntegration.RoktListener && !provider.isDisabled()) {
if (attributes == null) {
attributes = new HashMap<>();
}
MParticle instance = MParticle.getInstance();
MParticleUser user = instance.Identity().getCurrentUser();
String email = attributes.get("email");
String hashedEmail = getValueIgnoreCase(attributes, "emailsha256");
Map<String, String> tempAttributes = attributes;
confirmEmail(email, hashedEmail, user, instance.Identity(), () -> {
Map<String, String> finalAttributes = prepareAttributes(provider, tempAttributes, user);
((KitIntegration.RoktListener) provider).enrichAttributes(
finalAttributes, FilteredMParticleUser.getInstance(user.getId(), provider));
});
}
} catch (Exception e) {
Logger.warning("Failed to call prepareRoktListener for kit: " + provider.getName() + ": " + e.getMessage());
}
}
}

private void confirmEmail(
@Nullable String email,
@Nullable String hashedEmail,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1940,6 +1940,10 @@ class KitManagerImplTest {
return flowOf()
}

override fun enrichAttributes(attributes: MutableMap<String, String>, user: FilteredMParticleUser?) {
println("callRoktComposable with $attributes")
}

override fun setWrapperSdkVersion(wrapperSdkVersion: WrapperSdkVersion) {
println("setWrapperSdkVersion with $wrapperSdkVersion")
}
Expand Down
Loading