Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 44 additions & 29 deletions src/main/kotlin/com/mparticle/kits/IterableKit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,21 @@ import android.content.Intent
import android.os.Bundle
import android.util.Log
import com.google.firebase.messaging.RemoteMessage
import com.iterable.iterableapi.*
import com.iterable.iterableapi.BuildConfig
import com.iterable.iterableapi.IterableApi
import com.iterable.iterableapi.IterableConfig
import com.iterable.iterableapi.IterableConfigHelper
import com.iterable.iterableapi.IterableConstants
import com.iterable.iterableapi.IterableFirebaseMessagingService
import com.iterable.iterableapi.IterableHelper.IterableActionHandler
import com.mparticle.AttributionResult
import com.mparticle.MParticle
import com.mparticle.MParticle.IdentityType
import com.mparticle.identity.MParticleUser
import com.mparticle.kits.KitIntegration.*
import com.mparticle.kits.KitIntegration.ActivityListener
import com.mparticle.kits.KitIntegration.ApplicationStateListener
import com.mparticle.kits.KitIntegration.IdentityListener
import com.mparticle.kits.KitIntegration.PushListener
import com.mparticle.kits.iterable.Future

class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener, IdentityListener,
Expand Down Expand Up @@ -135,7 +142,7 @@ class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener
return string == null || "" == string
}

private fun getPlaceholderEmail(mParticleUser: MParticleUser): Future<String?> {
private fun getUserId(mParticleUser: MParticleUser): Future<String?> {
return Future.runAsync {
var id: String? = null
if (mpidEnabled) {
Expand All @@ -155,36 +162,43 @@ class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener
id = MParticle.getInstance()?.Identity()?.deviceApplicationStamp
}
}
if (id != null) {
"[email protected]"
} else {
null
}
id
}
}

private fun String?.getPlaceholderEmail(): String? = this?.let { "[email protected]" }

private fun handleOnSuccess(userId: String?, mParticleUser: MParticleUser) {
if (prefersUserId) {
IterableApi.getInstance().setUserId(userId)
} else {
val userIdentities = mParticleUser.userIdentities
val mpEmail = userIdentities[IdentityType.Email]
val placeholderEmail = userId.getPlaceholderEmail()

val email = if (!mpEmail.isNullOrEmpty()) {
mpEmail
} else if (!isEmpty(placeholderEmail)) {
placeholderEmail
} else null

IterableApi.getInstance().setEmail(email)
}
}

private fun updateIdentity(mParticleUser: MParticleUser) {
val userIdentities = mParticleUser.userIdentities
val email = userIdentities[IdentityType.Email]
val placeholderEmailFt = getPlaceholderEmail(mParticleUser)
placeholderEmailFt
.onSuccess(object : Future.SuccessCallback<String?> {
override fun onSuccess(placeholderEmail: String?) {
if (!email.isNullOrEmpty()) {
IterableApi.getInstance().setEmail(email)
} else if (!isEmpty(placeholderEmail)) {
IterableApi.getInstance().setEmail(placeholderEmail)
} else {
// No identifier, log out
IterableApi.getInstance().setEmail(null)
}
}
})
.onFailure(object : Future.FailureCallback {
override fun onFailure(throwable: Throwable?) {
Log.e(ITERABLE_KIT_ERROR_TAG, ITERABLE_KIT_ERROR_MESSAGE, throwable)
}
})
val userId = getUserId(mParticleUser)

userId.onSuccess(object : Future.SuccessCallback<String?> {
override fun onSuccess(userId: String?) {
handleOnSuccess(userId, mParticleUser)
return
}
}).onFailure(object : Future.FailureCallback {
override fun onFailure(throwable: Throwable?) {
Log.e(ITERABLE_KIT_ERROR_TAG, ITERABLE_KIT_ERROR_MESSAGE, throwable)
}
})
}

override fun willHandlePushMessage(intent: Intent): Boolean {
Expand All @@ -205,6 +219,7 @@ class IterableKit : KitIntegration(), ActivityListener, ApplicationStateListener
}

companion object {
var prefersUserId = false
private var customConfig: IterableConfig? = null
private const val SETTING_API_KEY = "apiKey"
private const val SETTING_GCM_INTEGRATION_NAME = "gcmIntegrationName"
Expand Down