@@ -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