@@ -6,14 +6,21 @@ import android.content.Intent
66import  android.os.Bundle 
77import  android.util.Log 
88import  com.google.firebase.messaging.RemoteMessage 
9- import  com.iterable.iterableapi.* 
109import  com.iterable.iterableapi.BuildConfig 
10+ import  com.iterable.iterableapi.IterableApi 
11+ import  com.iterable.iterableapi.IterableConfig 
12+ import  com.iterable.iterableapi.IterableConfigHelper 
13+ import  com.iterable.iterableapi.IterableConstants 
14+ import  com.iterable.iterableapi.IterableFirebaseMessagingService 
1115import  com.iterable.iterableapi.IterableHelper.IterableActionHandler 
1216import  com.mparticle.AttributionResult 
1317import  com.mparticle.MParticle 
1418import  com.mparticle.MParticle.IdentityType 
1519import  com.mparticle.identity.MParticleUser 
16- import  com.mparticle.kits.KitIntegration.* 
20+ import  com.mparticle.kits.KitIntegration.ActivityListener 
21+ import  com.mparticle.kits.KitIntegration.ApplicationStateListener 
22+ import  com.mparticle.kits.KitIntegration.IdentityListener 
23+ import  com.mparticle.kits.KitIntegration.PushListener 
1724import  com.mparticle.kits.iterable.Future 
1825
1926class  IterableKit  : KitIntegration (), ActivityListener, ApplicationStateListener, IdentityListener,
@@ -135,7 +142,7 @@ class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener
135142        return  string ==  null  ||  " " ==  string
136143    }
137144
138-     private  fun  getPlaceholderEmail (mParticleUser :  MParticleUser ): Future <String ?> {
145+     private  fun  getUserId (mParticleUser :  MParticleUser ): Future <String ?> {
139146        return  Future .runAsync {
140147            var  id:  String?  =  null 
141148            if  (mpidEnabled) {
@@ -155,36 +162,43 @@ class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener
155162                    id =  MParticle .getInstance()?.Identity ()?.deviceApplicationStamp
156163                }
157164            }
158-             if  (id !=  null ) {
159-                 " $id @placeholder.email" 
160-             } else  {
161-                 null 
162-             }
165+             id
166+         }
167+     }
168+ 
169+     private  fun  String?.getPlaceholderEmail (): String?  =  this ?.let  { " $it @placeholder.email" 
170+ 
171+     private  fun  handleOnSuccess (userId :  String? , mParticleUser :  MParticleUser ) {
172+         if  (prefersUserId) {
173+             IterableApi .getInstance().setUserId(userId)
174+         } else  {
175+             val  userIdentities =  mParticleUser.userIdentities
176+             val  mpEmail =  userIdentities[IdentityType .Email ]
177+             val  placeholderEmail =  userId.getPlaceholderEmail()
178+ 
179+             val  email =  if  (! mpEmail.isNullOrEmpty()) {
180+                 mpEmail
181+             } else  if  (! isEmpty(placeholderEmail)) {
182+                 placeholderEmail
183+             } else  null 
184+ 
185+             IterableApi .getInstance().setEmail(email)
163186        }
164187    }
165188
166189    private  fun  updateIdentity (mParticleUser :  MParticleUser ) {
167-         val  userIdentities =  mParticleUser.userIdentities
168-         val  email =  userIdentities[IdentityType .Email ]
169-         val  placeholderEmailFt =  getPlaceholderEmail(mParticleUser)
170-         placeholderEmailFt
171-             .onSuccess(object  :  Future .SuccessCallback <String ?> {
172-                 override  fun  onSuccess (placeholderEmail :  String? ) {
173-                     if  (! email.isNullOrEmpty()) {
174-                         IterableApi .getInstance().setEmail(email)
175-                     } else  if  (! isEmpty(placeholderEmail)) {
176-                         IterableApi .getInstance().setEmail(placeholderEmail)
177-                     } else  {
178-                         //  No identifier, log out
179-                         IterableApi .getInstance().setEmail(null )
180-                     }
181-                 }
182-             })
183-             .onFailure(object  :  Future .FailureCallback  {
184-                 override  fun  onFailure (throwable :  Throwable ? ) {
185-                     Log .e(ITERABLE_KIT_ERROR_TAG , ITERABLE_KIT_ERROR_MESSAGE , throwable)
186-                 }
187-             })
190+         val  userId =  getUserId(mParticleUser)
191+ 
192+         userId.onSuccess(object  :  Future .SuccessCallback <String ?> {
193+             override  fun  onSuccess (userId :  String? ) {
194+                 handleOnSuccess(userId, mParticleUser)
195+                 return 
196+             }
197+         }).onFailure(object  :  Future .FailureCallback  {
198+             override  fun  onFailure (throwable :  Throwable ? ) {
199+                 Log .e(ITERABLE_KIT_ERROR_TAG , ITERABLE_KIT_ERROR_MESSAGE , throwable)
200+             }
201+         })
188202    }
189203
190204    override  fun  willHandlePushMessage (intent :  Intent ): Boolean  {
@@ -205,6 +219,7 @@ class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener
205219    }
206220
207221    companion  object  {
222+         var  prefersUserId =  false 
208223        private  var  customConfig:  IterableConfig ?  =  null 
209224        private  const  val  SETTING_API_KEY  =  " apiKey" 
210225        private  const  val  SETTING_GCM_INTEGRATION_NAME  =  " gcmIntegrationName" 
0 commit comments