diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt index e186da9ed..c7028f166 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt @@ -6,7 +6,8 @@ import com.mparticle.kits.ReportingMessage open class AttributeListenerTestKit : ListenerTestKit(), - KitIntegration.AttributeListener { + KitIntegration.AttributeListener, + KitIntegration.LogoutListener { var setUserAttribute: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null var setUserAttributeList: ((attributeKey: String?, attributeValueList: List?) -> Unit)? = null diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java b/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java index ab5ba20b3..d4eb126cc 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java @@ -345,6 +345,21 @@ public interface SessionListener { List onSessionEnd(); } + /** + * Kits may implement this interface to respond when the mParticle Identity API performs a logout. + */ + public interface LogoutListener { + + /** + * The mParticle SDK exposes a logout API, allowing developers to track an event + * when a user logs out of their app/platform. Use this opportunity to perform the appropriate logic + * as per your platforms logout paradigm, such as clearing user attributes. + * + * @return Kits should return a List of ReportingMessages indicating that the logout was processed one or more times, or null if it was not processed + */ + List logout(); + } + /** * Kits should implement this interface when their underlying service has the notion * of a user with attributes. @@ -374,15 +389,6 @@ public interface AttributeListener { void removeUserIdentity(MParticle.IdentityType identityType); - /** - * The mParticle SDK exposes a logout API, allowing developers to track an event - * when a user logs out of their app/platform. Use this opportunity to perform the appropriate logic - * as per your platforms logout paradigm, such as clearing user attributes. - * - * @return Kits should return a List of ReportingMessages indicating that the logout was processed one or more times, or null if it was not processed - */ - List logout(); - } /** diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java index 57a83b55f..59a376c56 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java @@ -809,9 +809,8 @@ public void removeUserIdentity(MParticle.IdentityType identityType) { public void logout() { for (KitIntegration provider : providers.values()) { try { - if (provider instanceof KitIntegration.AttributeListener && !provider.isDisabled()) { - List report = ((KitIntegration.AttributeListener) provider).logout(); - getReportingManager().logAll(report); + if (provider instanceof KitIntegration.LogoutListener listener && !provider.isDisabled()) { + getReportingManager().logAll(listener.logout()); } } catch (Exception e) { Logger.warning("Failed to call logout for kit: " + provider.getName() + ": " + e.getMessage()); diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt index fa8dff19b..a7396ea9f 100644 --- a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -7,6 +7,7 @@ import com.mparticle.internal.MPUtility import com.mparticle.internal.MPUtility.AdIdInfo import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import org.json.JSONException import org.json.JSONObject @@ -16,6 +17,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), AttributeListener, + LogoutListener, PushListener, ApplicationStateListener { private val dVer = "2" diff --git a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt index 3784ba655..dac46a71c 100644 --- a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt +++ b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt @@ -20,6 +20,7 @@ import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.media.events.ContentType import com.mparticle.media.events.EventAttributes @@ -36,6 +37,7 @@ open class AdobeKit : KitIntegration(), EventListener, AttributeListener, + LogoutListener, PushListener, ApplicationStateListener { companion object { diff --git a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt index f0b6d0c04..8721e7499 100644 --- a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt +++ b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt @@ -44,6 +44,7 @@ class AppsFlyerKit : KitIntegration(), KitIntegration.EventListener, KitIntegration.AttributeListener, + KitIntegration.LogoutListener, KitIntegration.CommerceListener, AppsFlyerConversionListener, KitIntegration.ActivityListener, diff --git a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt index 770ecf20e..3fbcdcd13 100644 --- a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt +++ b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt @@ -13,11 +13,13 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.LogoutListener import java.math.BigDecimal class ApptimizeKit : KitIntegration(), AttributeListener, + LogoutListener, KitIntegration.EventListener, CommerceListener, OnTestRunListener { diff --git a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt index 12e3300f0..02efdc8bc 100644 --- a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt +++ b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt @@ -15,6 +15,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import io.branch.referral.Branch import io.branch.referral.Branch.BranchReferralInitListener import io.branch.referral.BranchError @@ -37,6 +38,7 @@ class BranchMetricsKit : EventListener, CommerceListener, AttributeListener, + LogoutListener, ApplicationStateListener, IdentityListener, BranchReferralInitListener { diff --git a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt index c4af707ab..7c296fd73 100644 --- a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt +++ b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt @@ -12,6 +12,7 @@ import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.kits.KitIntegration.ActivityListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap import java.util.LinkedList @@ -19,6 +20,7 @@ class ComscoreKit : KitIntegration(), KitIntegration.EventListener, AttributeListener, + LogoutListener, ActivityListener { private var isEnterprise = false diff --git a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt index 04ccd31cf..4d412b92d 100644 --- a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt +++ b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt @@ -10,12 +10,14 @@ import com.mparticle.AttributionResult import com.mparticle.MParticle.IdentityType import com.mparticle.identity.MParticleUser import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException import org.json.JSONObject class KochavaKit : KitIntegration(), AttributeListener, + LogoutListener, KitIntegration.IdentityListener { override fun getName(): String = NAME diff --git a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt index 6c106feb7..3e45f9054 100644 --- a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt +++ b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt @@ -19,6 +19,7 @@ import com.mparticle.internal.MPUtility import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.ReportingMessage import org.json.JSONArray @@ -31,6 +32,7 @@ class LocalyticsKit : KitIntegration.EventListener, CommerceListener, AttributeListener, + LogoutListener, PushListener, CallToActionListener { private var customDimensionJson: JSONArray? = null diff --git a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt index 280fd6aa3..df796569a 100644 --- a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt +++ b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt @@ -19,6 +19,7 @@ import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import com.singular.sdk.SDIDAccessorHandler @@ -38,7 +39,8 @@ open class SingularKit : CommerceListener, ApplicationStateListener, UserAttributeListener, - AttributeListener { + AttributeListener, + LogoutListener { interface DeviceAttributionCallback : SingularDeviceAttributionHandler interface SdidAccessorHandler : SDIDAccessorHandler diff --git a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt index 138b26851..88ea56d13 100644 --- a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt +++ b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt @@ -28,7 +28,8 @@ class UrbanAirshipKit : KitIntegration.PushListener, KitIntegration.EventListener, CommerceListener, - KitIntegration.AttributeListener { + KitIntegration.AttributeListener, + KitIntegration.LogoutListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null