Skip to content

Commit b0b4ff0

Browse files
fix: ensure user attributes are applied before proceeding with Rokt execution
1 parent d40a90e commit b0b4ff0

1 file changed

Lines changed: 40 additions & 20 deletions

File tree

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

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.mparticle.MParticle;
2525
import com.mparticle.MParticleOptions;
2626
import com.mparticle.MParticleTask;
27+
import com.mparticle.TypedUserAttributeListener;
2728
import com.mparticle.UserAttributeListener;
2829
import com.mparticle.WrapperSdkVersion;
2930
import com.mparticle.commerce.CommerceEvent;
@@ -1369,27 +1370,21 @@ public void execute(@NonNull String viewName,
13691370
finalAttributes.put(mapTo, value);
13701371
}
13711372
}
1372-
Map<String, Object> objectAttributes = new HashMap<>();
1373-
for (Map.Entry<String, String> entry : finalAttributes.entrySet()) {
1374-
if(!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1375-
objectAttributes.put(entry.getKey(), entry.getValue());
1376-
}
1377-
}
1378-
if (user != null) {
1379-
user.setUserAttributes(objectAttributes);
1380-
}
1381-
1382-
if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1383-
finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, String.valueOf(Objects.toString(MPUtility.isDevEnv(), "false"))); // Default value is "false" if null
1384-
}
1373+
setRoktAttributesOnUser(finalAttributes, user, () -> {
1374+
if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1375+
finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, String.valueOf(Objects.toString(MPUtility.isDevEnv(), "false"))); // Default value is "false" if null
1376+
}
13851377

1386-
((KitIntegration.RoktListener) provider).execute(viewName,
1387-
finalAttributes,
1388-
mpRoktEventCallback,
1389-
placeHolders,
1390-
fontTypefaces,
1391-
FilteredMParticleUser.getInstance(user.getId(), provider),
1392-
config);
1378+
Long userId = (user != null) ? user.getId() : null;
1379+
FilteredMParticleUser filteredUser = FilteredMParticleUser.getInstance(userId, provider);
1380+
((KitIntegration.RoktListener) provider).execute(viewName,
1381+
finalAttributes,
1382+
mpRoktEventCallback,
1383+
placeHolders,
1384+
fontTypefaces,
1385+
filteredUser,
1386+
config);
1387+
});
13931388
});
13941389
}
13951390
} catch (Exception e) {
@@ -1424,6 +1419,31 @@ public void purchaseFinalized(@NonNull String placementId, @NonNull String catal
14241419
}
14251420
}
14261421

1422+
private void setRoktAttributesOnUser(
1423+
Map<String, String> finalAttributes,
1424+
MParticleUser user,
1425+
Runnable runnable
1426+
) {
1427+
Map<String, Object> objectAttributes = new HashMap<>();
1428+
for (Map.Entry<String, String> entry : finalAttributes.entrySet()) {
1429+
if(!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1430+
objectAttributes.put(entry.getKey(), entry.getValue());
1431+
}
1432+
}
1433+
if (user != null) {
1434+
user.setUserAttributes(objectAttributes);
1435+
// Use asynchronous getUserAttributes with callback to ensure attributes are set before proceeding
1436+
user.getUserAttributes(new TypedUserAttributeListener() {
1437+
@Override
1438+
public void onUserAttributesReceived(@NonNull Map<String, ?> userAttributes, @NonNull Map<String, ? extends List<String>> userAttributeLists, long mpid) {
1439+
runnable.run();
1440+
}
1441+
});
1442+
} else {
1443+
runnable.run();
1444+
}
1445+
}
1446+
14271447
private void confirmEmail(
14281448
@Nullable String email,
14291449
@Nullable MParticleUser user,

0 commit comments

Comments
 (0)