diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java index 319968d6b..6f23b2a54 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java @@ -17,10 +17,11 @@ import org.json.JSONException; import org.json.JSONObject; -import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; /** * Created by David Truong dt@iterable.com @@ -53,7 +54,7 @@ public class IterableApi { private @Nullable IterableEmbeddedManager embeddedManager; private String inboxSessionId; private IterableAuthManager authManager; - private HashMap deviceAttributes = new HashMap<>(); + private ConcurrentHashMap deviceAttributes = new ConcurrentHashMap<>(); private IterableKeychain keychain; @@ -149,7 +150,7 @@ void setAttributionInfo(IterableAttributionInfo attributionInfo) { ); } - HashMap getDeviceAttributes() { + Map getDeviceAttributes() { return deviceAttributes; } @@ -676,7 +677,7 @@ void setAuthToken(String authToken, boolean bypassAuth) { } } - protected void registerDeviceToken(final @Nullable String email, final @Nullable String userId, final @Nullable String authToken, final @NonNull String applicationName, final @NonNull String deviceToken, final HashMap deviceAttributes) { + protected void registerDeviceToken(final @Nullable String email, final @Nullable String userId, final @Nullable String authToken, final @NonNull String applicationName, final @NonNull String deviceToken, final Map deviceAttributes) { if (deviceToken != null) { if (!checkSDKInitialization() && _userIdUnknown == null) { if (sharedInstance.config.enableUnknownUserActivation) { @@ -721,7 +722,7 @@ protected void disableToken(@Nullable String email, @Nullable String userId, @Nu * @param deviceToken * @param dataFields */ - protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @Nullable String authToken, @NonNull String applicationName, @NonNull String deviceToken, @Nullable JSONObject dataFields, HashMap deviceAttributes) { + protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @Nullable String authToken, @NonNull String applicationName, @NonNull String deviceToken, @Nullable JSONObject dataFields, Map deviceAttributes) { if (!checkSDKInitialization()) { return; } @@ -1226,10 +1227,18 @@ public Bundle getPayloadData() { } public void setDeviceAttribute(String key, String value) { + if (key == null || value == null) { + IterableLogger.e(TAG, "setDeviceAttribute: key and value must not be null"); + return; + } deviceAttributes.put(key, value); } public void removeDeviceAttribute(String key) { + if (key == null) { + IterableLogger.e(TAG, "removeDeviceAttribute: key must not be null"); + return; + } deviceAttributes.remove(key); } //endregion diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java index bdb3a2578..f2da2b104 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java @@ -14,8 +14,8 @@ import org.json.JSONObject; import java.util.Arrays; -import java.util.HashMap; import java.util.List; +import java.util.Map; class IterableApiClient { private static final String TAG = "IterableApiClient"; @@ -620,7 +620,7 @@ protected void disableToken(@Nullable String email, @Nullable String userId, @Nu } } - protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @Nullable String authToken, @NonNull String applicationName, @NonNull String deviceToken, @Nullable JSONObject dataFields, HashMap deviceAttributes, @Nullable final IterableHelper.SuccessHandler successHandler, @Nullable final IterableHelper.FailureHandler failureHandler) { + protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @Nullable String authToken, @NonNull String applicationName, @NonNull String deviceToken, @Nullable JSONObject dataFields, Map deviceAttributes, @Nullable final IterableHelper.SuccessHandler successHandler, @Nullable final IterableHelper.FailureHandler failureHandler) { Context context = authProvider.getContext(); JSONObject requestJSON = new JSONObject(); try { @@ -630,7 +630,7 @@ protected void registerDeviceToken(@Nullable String email, @Nullable String user dataFields = new JSONObject(); } - for (HashMap.Entry entry : deviceAttributes.entrySet()) { + for (Map.Entry entry : deviceAttributes.entrySet()) { dataFields.put(entry.getKey(), entry.getValue()); }