Skip to content

Commit 36ffccf

Browse files
committed
[MOB-1482] Add Device Attributes methods
Adding methods to add custom device attributes, remove device attributes. Integrated it with existing push registration and test methods.
1 parent 55867f5 commit 36ffccf

File tree

3 files changed

+40
-9
lines changed

3 files changed

+40
-9
lines changed

iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.json.JSONObject;
2323

2424
import java.util.Arrays;
25+
import java.util.HashMap;
2526
import java.util.List;
2627
import java.util.UUID;
2728

@@ -52,6 +53,7 @@ public class IterableApi {
5253

5354
private IterableInAppManager inAppManager;
5455
private String inboxSessionId;
56+
private HashMap<String, String> deviceAttributes = new HashMap<>();
5557

5658
//---------------------------------------------------------------------------------------
5759
//endregion
@@ -201,6 +203,18 @@ void setNotificationData(IterableNotificationData data) {
201203
setAttributionInfo(new IterableAttributionInfo(data.getCampaignId(), data.getTemplateId(), data.getMessageId()));
202204
}
203205
}
206+
207+
HashMap getDeviceAttributes() {
208+
return deviceAttributes;
209+
}
210+
211+
public void setDeviceAttribute(String key, String value) {
212+
deviceAttributes.put(key, value);
213+
}
214+
215+
public void removeFromDeviceAttribute(String key) {
216+
deviceAttributes.remove(key);
217+
}
204218
//---------------------------------------------------------------------------------------
205219
//endregion
206220

@@ -363,14 +377,14 @@ public boolean isIterableIntent(@Nullable Intent intent) {
363377
* @param token Push token obtained from GCM or FCM
364378
*/
365379
public void registerDeviceToken(@NonNull String token) {
366-
registerDeviceToken(_email, _userId, getPushIntegrationName(), token);
380+
registerDeviceToken(_email, _userId, getPushIntegrationName(), token, deviceAttributes);
367381
}
368382

369-
protected void registerDeviceToken(final @Nullable String email, final @Nullable String userId, final @NonNull String applicationName, final @NonNull String token) {
383+
protected void registerDeviceToken(final @Nullable String email, final @Nullable String userId, final @NonNull String applicationName, final @NonNull String token, final HashMap<String, String> deviceAttributes) {
370384
if (token != null) {
371385
final Thread registrationThread = new Thread(new Runnable() {
372386
public void run() {
373-
registerDeviceToken(email, userId, applicationName, token, null);
387+
registerDeviceToken(email, userId, applicationName, token, null, deviceAttributes);
374388
}
375389
});
376390
registrationThread.start();
@@ -1093,7 +1107,7 @@ protected void disableToken(@Nullable String email, @Nullable String userId, @No
10931107
* @param token
10941108
* @param dataFields
10951109
*/
1096-
protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @NonNull String applicationName, @NonNull String token, @Nullable JSONObject dataFields) {
1110+
protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @NonNull String applicationName, @NonNull String token, @Nullable JSONObject dataFields, @Nullable HashMap<String, String> deviceAttributes) {
10971111
if (!checkSDKInitialization()) {
10981112
return;
10991113
}
@@ -1114,6 +1128,13 @@ protected void registerDeviceToken(@Nullable String email, @Nullable String user
11141128
if (dataFields == null) {
11151129
dataFields = new JSONObject();
11161130
}
1131+
1132+
if (deviceAttributes != null) {
1133+
for (HashMap.Entry<String, String> entry : deviceAttributes.entrySet()) {
1134+
dataFields.put(entry.getKey(), entry.getValue());
1135+
}
1136+
}
1137+
11171138
dataFields.put(IterableConstants.FIREBASE_TOKEN_TYPE, IterableConstants.MESSAGING_PLATFORM_FIREBASE);
11181139
dataFields.put(IterableConstants.FIREBASE_COMPATIBLE, true);
11191140
dataFields.put(IterableConstants.DEVICE_BRAND, Build.BRAND); //brand: google

iterableapi/src/main/java/com/iterable/iterableapi/IterablePushRegistration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.content.SharedPreferences;
55
import android.os.AsyncTask;
6+
67
import androidx.annotation.NonNull;
78

89
import com.google.firebase.iid.FirebaseInstanceId;
@@ -33,7 +34,8 @@ protected Void doInBackground(IterablePushRegistrationData... params) {
3334
iterablePushRegistrationData.email,
3435
iterablePushRegistrationData.userId,
3536
iterablePushRegistrationData.pushIntegrationName,
36-
pushRegistrationObject.token);
37+
pushRegistrationObject.token,
38+
IterableApi.getInstance().getDeviceAttributes());
3739

3840
} else if (iterablePushRegistrationData.pushRegistrationAction == IterablePushRegistrationData.PushRegistrationAction.DISABLE) {
3941
IterableApi.sharedInstance.disableToken(

iterableapi/src/test/java/com/iterable/iterableapi/IterablePushRegistrationTest.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.robolectric.RuntimeEnvironment;
1111
import org.robolectric.shadows.ShadowApplication;
1212

13+
import java.util.HashMap;
14+
1315
import okhttp3.mockwebserver.MockWebServer;
1416

1517
import static com.iterable.iterableapi.IterableTestUtils.stubAnyRequestReturningStatusCode;
@@ -33,12 +35,15 @@ public class IterablePushRegistrationTest extends BaseTest {
3335
private static final String OLD_TOKEN = "oldToken";
3436
private static final String GCM_SENDER_ID = "1234567890";
3537
public static final String INTEGRATION_NAME = "integrationName";
38+
public static final String DEVICE_ATTRIBUTES_KEY = "SDK";
39+
public static final String DEVICE_ATTRIBUTES_VALUE = "ReactNative 2.3.4";
3640

3741
private MockWebServer server;
3842
private IterableApi originalApi;
3943
private IterableApi apiMock;
4044
private IterablePushRegistration.Util.UtilImpl originalPushRegistrationUtil;
4145
private IterablePushRegistration.Util.UtilImpl pushRegistrationUtilMock;
46+
private HashMap<String, String> deviceAttributes = new HashMap<String, String>();
4247

4348
@Before
4449
public void setUp() throws Exception {
@@ -73,7 +78,8 @@ public void testEnableDevice() throws Exception {
7378
IterablePushRegistrationData data = new IterablePushRegistrationData(IterableTestUtils.userEmail, null, INTEGRATION_NAME, IterablePushRegistrationData.PushRegistrationAction.ENABLE);
7479
new IterablePushRegistration().execute(data);
7580

76-
verify(apiMock, timeout(100)).registerDeviceToken(eq(IterableTestUtils.userEmail), nullable(String.class), eq(INTEGRATION_NAME), eq(TEST_TOKEN));
81+
verify(apiMock, timeout(100)).registerDeviceToken(eq(IterableTestUtils.userEmail), nullable(String.class), eq(INTEGRATION_NAME), eq(TEST_TOKEN), eq(deviceAttributes));
82+
7783
verify(apiMock, never()).disableToken(eq(IterableTestUtils.userEmail), nullable(String.class), any(String.class), nullable(IterableHelper.SuccessHandler.class), nullable(IterableHelper.FailureHandler.class));
7884
}
7985

@@ -98,19 +104,21 @@ public void testDisableOldGcmToken() throws Exception {
98104
when(pushRegistrationUtilMock.getFirebaseToken(eq(GCM_SENDER_ID), eq(IterableConstants.MESSAGING_PLATFORM_GOOGLE))).thenReturn(OLD_TOKEN);
99105

100106
IterablePushRegistrationData data = new IterablePushRegistrationData(IterableTestUtils.userEmail, null, INTEGRATION_NAME, IterablePushRegistrationData.PushRegistrationAction.ENABLE);
107+
IterableApi.getInstance().setDeviceAttribute(DEVICE_ATTRIBUTES_KEY, DEVICE_ATTRIBUTES_VALUE);
101108
new IterablePushRegistration().execute(data);
109+
deviceAttributes.put(DEVICE_ATTRIBUTES_KEY, DEVICE_ATTRIBUTES_VALUE);
102110

103111
ArgumentCaptor<IterableHelper.SuccessHandler> successHandlerCaptor = ArgumentCaptor.forClass(IterableHelper.SuccessHandler.class);
104-
verify(apiMock).registerDeviceToken(eq(IterableTestUtils.userEmail), isNull(String.class), eq(INTEGRATION_NAME), eq(NEW_TOKEN));
112+
verify(apiMock).registerDeviceToken(eq(IterableTestUtils.userEmail), isNull(String.class), eq(INTEGRATION_NAME), eq(NEW_TOKEN), eq(deviceAttributes));
105113
verify(apiMock, times(1)).disableToken(eq(IterableTestUtils.userEmail), isNull(String.class), eq(OLD_TOKEN), successHandlerCaptor.capture(), nullable(IterableHelper.FailureHandler.class));
106114
successHandlerCaptor.getValue().onSuccess(new JSONObject());
107115

108116
reset(apiMock);
109117

110118
new IterablePushRegistration().execute(data);
111119

112-
verify(apiMock).registerDeviceToken(eq(IterableTestUtils.userEmail), isNull(String.class), eq(INTEGRATION_NAME), eq(NEW_TOKEN));
120+
verify(apiMock).registerDeviceToken(eq(IterableTestUtils.userEmail), isNull(String.class), eq(INTEGRATION_NAME), eq(NEW_TOKEN), eq(deviceAttributes));
113121
verify(apiMock, never()).disableToken(eq(IterableTestUtils.userEmail), isNull(String.class), any(String.class), nullable(IterableHelper.SuccessHandler.class), nullable(IterableHelper.FailureHandler.class));
114122
}
115123

116-
}
124+
}

0 commit comments

Comments
 (0)