|
24 | 24 | import com.mparticle.MParticle; |
25 | 25 | import com.mparticle.MParticleOptions; |
26 | 26 | import com.mparticle.MParticleTask; |
| 27 | +import com.mparticle.TypedUserAttributeListener; |
27 | 28 | import com.mparticle.UserAttributeListener; |
28 | 29 | import com.mparticle.WrapperSdkVersion; |
29 | 30 | import com.mparticle.commerce.CommerceEvent; |
@@ -1369,27 +1370,21 @@ public void execute(@NonNull String viewName, |
1369 | 1370 | finalAttributes.put(mapTo, value); |
1370 | 1371 | } |
1371 | 1372 | } |
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 | + } |
1385 | 1377 |
|
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 | + }); |
1393 | 1388 | }); |
1394 | 1389 | } |
1395 | 1390 | } catch (Exception e) { |
@@ -1424,6 +1419,31 @@ public void purchaseFinalized(@NonNull String placementId, @NonNull String catal |
1424 | 1419 | } |
1425 | 1420 | } |
1426 | 1421 |
|
| 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 | + |
1427 | 1447 | private void confirmEmail( |
1428 | 1448 | @Nullable String email, |
1429 | 1449 | @Nullable MParticleUser user, |
|
0 commit comments