1919import com .mparticle .commerce .Product ;
2020import com .mparticle .commerce .TransactionAttributes ;
2121import com .mparticle .commerce .Promotion ;
22+ import com .mparticle .identity .AliasRequest ;
23+ import com .mparticle .identity .IdentityApi ;
2224import com .mparticle .identity .IdentityApiRequest ;
2325import com .mparticle .identity .IdentityApiResult ;
2426import com .mparticle .identity .MParticleUser ;
2527import com .mparticle .identity .IdentityHttpResponse ;
2628import com .mparticle .identity .TaskFailureListener ;
2729import com .mparticle .identity .TaskSuccessListener ;
30+ import com .mparticle .internal .Logger ;
2831
2932import java .util .ArrayList ;
3033import java .util .HashMap ;
@@ -164,8 +167,13 @@ public void onFailure(IdentityHttpResponse identityHttpResponse) {
164167 public void onSuccess (IdentityApiResult identityApiResult ) {
165168 //Continue with login, and you can also access the new/updated user:
166169 MParticleUser user = identityApiResult .getUser ();
167- String userID = Long .toString (user .getId ());
168- completion .invoke (null , userID );
170+ String userId = Long .toString (user .getId ());
171+ MParticleUser previousUser = identityApiResult .getPreviousUser ();
172+ String previousUserId = null ;
173+ if (previousUser != null ) {
174+ previousUserId = Long .toString (previousUser .getId ());
175+ }
176+ completion .invoke (null , userId , previousUserId );
169177 }
170178 });
171179 }
@@ -227,6 +235,65 @@ public void getCurrentUserWithCompletion(Callback completion) {
227235
228236 }
229237
238+ @ ReactMethod
239+ public void aliasUsers (final ReadableMap readableMap , final Callback completion ) {
240+ IdentityApi identityApi = MParticle .getInstance ().Identity ();
241+ ReadableMapKeySetIterator iterator = readableMap .keySetIterator ();
242+ Long destinationMpid = null ;
243+ Long sourceMpid = null ;
244+ Long startTime = null ;
245+ Long endTime = null ;
246+
247+ while (iterator .hasNextKey ()) {
248+ try {
249+ switch (iterator .nextKey ()) {
250+ case "destinationMpid" :
251+ destinationMpid = Utils .getLong (readableMap , "destinationMpid" , false );
252+ break ;
253+ case "sourceMpid" :
254+ sourceMpid = Utils .getLong (readableMap , "sourceMpid" , false );
255+ break ;
256+ case "startTime" :
257+ startTime = Utils .getLong (readableMap , "startTime" , true );
258+ break ;
259+ case "endTime" :
260+ endTime = Utils .getLong (readableMap , "endTime" , true );
261+ break ;
262+ }
263+ } catch (NumberFormatException ex ) {
264+ Logger .error (ex .getMessage ());
265+ completion .invoke (false , ex .getMessage ());
266+ return ;
267+ }
268+ }
269+ if (startTime == null && endTime == null ) {
270+ MParticleUser sourceUser = null ;
271+ MParticleUser destinationUser = null ;
272+ if (sourceMpid != null ) {
273+ sourceUser = identityApi .getUser (sourceMpid );
274+ }
275+ if (destinationMpid != null ) {
276+ destinationUser = identityApi .getUser (destinationMpid );
277+ }
278+ if (sourceUser != null && destinationUser != null ) {
279+ AliasRequest request = AliasRequest .builder (sourceUser , destinationUser ).build ();
280+ boolean success = MParticle .getInstance ().Identity ().aliasUsers (request );
281+ completion .invoke (success );
282+ } else {
283+ completion .invoke (false , "MParticleUser could not be found for provided sourceMpid and destinationMpid" );
284+ }
285+ } else {
286+ AliasRequest request = AliasRequest .builder ()
287+ .destinationMpid (destinationMpid )
288+ .sourceMpid (sourceMpid )
289+ .startTime (startTime )
290+ .endTime (endTime )
291+ .build ();
292+ boolean success = identityApi .aliasUsers (request );
293+ completion .invoke (success );
294+ }
295+ }
296+
230297 @ ReactMethod
231298 public void getUserIdentities (final String userId , Callback completion ) {
232299 MParticleUser selectedUser = MParticle .getInstance ().Identity ().getUser (parseMpid (userId ));
@@ -237,6 +304,26 @@ public void getUserIdentities(final String userId, Callback completion) {
237304 }
238305 }
239306
307+ @ ReactMethod
308+ public void getFirstSeen (final String userId , Callback completion ) {
309+ MParticleUser selectedUser = MParticle .getInstance ().Identity ().getUser (Utils .parseMpid (userId ));
310+ if (selectedUser != null ) {
311+ completion .invoke (String .valueOf (selectedUser .getFirstSeenTime ()));
312+ } else {
313+ completion .invoke ();
314+ }
315+ }
316+
317+ @ ReactMethod
318+ public void getLastSeen (final String userId , Callback completion ) {
319+ MParticleUser selectedUser = MParticle .getInstance ().Identity ().getUser (Utils .parseMpid (userId ));
320+ if (selectedUser != null ) {
321+ completion .invoke (String .valueOf (selectedUser .getLastSeenTime ()));
322+ } else {
323+ completion .invoke ();
324+ }
325+ }
326+
240327 @ ReactMethod
241328 public void getAttributions (Callback completion ) {
242329 Map <Integer , AttributionResult > attributionResultMap = MParticle .getInstance ().getAttributionResults ();
0 commit comments