Skip to content

Commit c5c45e5

Browse files
authored
Merge pull request #236 from Iterable/MOB-1482-Add-DeviceAttribute-getter-setter
[MOB-1482] Add Device Attributes methods
2 parents 6383908 + 0e3fbee commit c5c45e5

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

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

Lines changed: 23 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 removeDeviceAttribute(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();
@@ -1103,7 +1117,7 @@ protected void disableToken(@Nullable String email, @Nullable String userId, @No
11031117
* @param token
11041118
* @param dataFields
11051119
*/
1106-
protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @NonNull String applicationName, @NonNull String token, @Nullable JSONObject dataFields) {
1120+
protected void registerDeviceToken(@Nullable String email, @Nullable String userId, @NonNull String applicationName, @NonNull String token, @Nullable JSONObject dataFields, HashMap<String, String> deviceAttributes) {
11071121
if (!checkSDKInitialization()) {
11081122
return;
11091123
}
@@ -1124,6 +1138,11 @@ protected void registerDeviceToken(@Nullable String email, @Nullable String user
11241138
if (dataFields == null) {
11251139
dataFields = new JSONObject();
11261140
}
1141+
1142+
for (HashMap.Entry<String, String> entry : deviceAttributes.entrySet()) {
1143+
dataFields.put(entry.getKey(), entry.getValue());
1144+
}
1145+
11271146
dataFields.put(IterableConstants.FIREBASE_TOKEN_TYPE, IterableConstants.MESSAGING_PLATFORM_FIREBASE);
11281147
dataFields.put(IterableConstants.FIREBASE_COMPATIBLE, true);
11291148
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)