Skip to content

Commit 442e569

Browse files
markvdouwdavidtruong
andauthored
feat: Update user id (#66) (#67)
* fix: Adds in new preference for userId primary identity (#64) * Adds preference for userId primary identity. * Update IterableKit.kt removed extra spaces * Changes to remove duplicates and make it less verbose. --------- Co-authored-by: David Truong <[email protected]>
1 parent 9aa9e55 commit 442e569

File tree

1 file changed

+44
-29
lines changed

1 file changed

+44
-29
lines changed

src/main/kotlin/com/mparticle/kits/IterableKit.kt

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,21 @@ import android.content.Intent
66
import android.os.Bundle
77
import android.util.Log
88
import com.google.firebase.messaging.RemoteMessage
9-
import com.iterable.iterableapi.*
109
import 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
1115
import com.iterable.iterableapi.IterableHelper.IterableActionHandler
1216
import com.mparticle.AttributionResult
1317
import com.mparticle.MParticle
1418
import com.mparticle.MParticle.IdentityType
1519
import 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
1724
import com.mparticle.kits.iterable.Future
1825

1926
class 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

Comments
 (0)