diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 6d5ba595c..d662ce478 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -224,6 +224,8 @@ jobs: uses: actions/checkout@v6 with: ref: regression/${{ github.run_number }} + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -233,12 +235,11 @@ jobs: - name: "Run Android Core SDK Lint" run: ./gradlew lint - name: "Setup Android Kit Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew lint -c settings-kits.gradle + run: ./gradlew lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Lint (urbanairship-kit)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew lint + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 lint - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -262,6 +263,8 @@ jobs: uses: actions/checkout@v6 with: ref: regression/${{ github.run_number }} + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -271,12 +274,11 @@ jobs: - name: "Run Android Core SDK Kotlin Lint" run: ./gradlew ktlintCheck - name: "Setup Android Kit Kotlin Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew ktlintCheck -c settings-kits.gradle + run: ./gradlew ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew ktlintCheck + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 ktlintCheck - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -305,6 +307,8 @@ jobs: with: repository: mparticle/mparticle-android-sdk ref: regression/${{ github.run_number }} + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -312,12 +316,11 @@ jobs: java-version: "17" cache: "gradle" - name: "Build Android Core" - run: ./gradlew clean publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew clean publishMavenPublicationToMavenLocal - name: "Test Kits" - run: ./gradlew clean testRelease -c settings-kits.gradle + run: ./gradlew clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Test Isolated Kits (urbanairship-kit)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew clean testRelease + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 clean testRelease semantic-release-dryrun: name: "Test Semantic Release - Dry Run" diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 3f41bf20c..33308c7cf 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -100,6 +100,8 @@ jobs: steps: - name: "Checkout Branch" uses: actions/checkout@v6 + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -108,9 +110,9 @@ jobs: - name: "Run Android Core SDK Lint" run: ./gradlew lint - name: "Setup Android Kit Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew -c settings-kits.gradle lint + run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true lint - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -125,6 +127,8 @@ jobs: steps: - name: "Checkout Branch" uses: actions/checkout@v6 + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -133,9 +137,9 @@ jobs: - name: "Run Android Core SDK Kotlin Lint" run: ./gradlew ktlintCheck - name: "Setup Android Kit Kotlin Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -c settings-kits.gradle ktlintCheck + run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true ktlintCheck - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -156,20 +160,21 @@ jobs: steps: - name: "Checkout Branch" uses: actions/checkout@v6 + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: distribution: "zulu" java-version: "17" - name: "Generate Core Release Build" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Kit-Base Release Tests and Build" - run: ./gradlew :android-kit-base:testRelease -PVERSION=$(head -n 1 VERSION) + run: ./gradlew :android-kit-base:testRelease - name: "Run Kit Release Tests and Build" - run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -PVERSION=$(head -n 1 VERSION) + run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Compatibility Tests (urbanairship)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew -PisRelease=true testRelease + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease automerge-dependabot: name: "Save PR Number for Dependabot Automerge" diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index f3738789d..012775cc9 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -27,11 +27,11 @@ runtimes: lint: enabled: - actionlint@1.7.7 - - checkov@3.2.470 + - checkov@3.2.513 - git-diff-check - ktlint@1.7.1 - - markdownlint@0.45.0 - - prettier@3.6.2 + - markdownlint@0.48.0 + - prettier@3.8.1 - shellcheck@0.11.0 - shfmt@3.6.0 - trufflehog@3.90.6 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..b03c247aa 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 @@ -1,12 +1,14 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle -import com.mparticle.kits.KitIntegration +import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.ReportingMessage open class AttributeListenerTestKit : ListenerTestKit(), - KitIntegration.AttributeListener { + AttributeListener, + 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..c37537d82 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 @@ -39,6 +39,7 @@ import com.mparticle.internal.Logger; import com.mparticle.internal.MPUtility; import com.mparticle.internal.ReportingManager; +import com.mparticle.kits.KitIntegration.LogoutListener; import com.mparticle.kits.mappings.CustomMapping; import com.mparticle.rokt.RoktOptions; @@ -809,9 +810,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 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/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index 039eb81b6..9c5cf7c53 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -3,6 +3,7 @@ package com.mparticle.kits import com.android.build.gradle.LibraryExtension import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.RepositoryHandler class KitPlugin implements Plugin { void apply(Project target) { @@ -10,14 +11,14 @@ class KitPlugin implements Plugin { //formerly in kit-common.gradle target.apply(plugin: 'com.android.library') target.group = 'com.mparticle' - target.buildscript.repositories.add(target.repositories.mavenLocal()) - target.buildscript.repositories.add(target.repositories.google()) - target.buildscript.repositories.add(target.repositories.mavenCentral()) - target.repositories.add(target.repositories.mavenLocal()) - target.repositories.add(target.repositories.google()) - target.repositories.add(target.repositories.mavenCentral()) + boolean mparticleFromMavenLocalOnly = resolveMparticleFromMavenLocalOnly(target) + configureRepositories(target.buildscript.repositories, mparticleFromMavenLocalOnly) + configureRepositories(target.repositories, mparticleFromMavenLocalOnly) target.configurations.create('deployerJars') - def kitBaseVersion = target.findProperty('VERSION') ?: '+' + // VERSION from CI is often set only on the root project (e.g. ORG_GRADLE_PROJECT_VERSION); kit + // subprojects do not always inherit it, which would fall back to '+' and unstable resolution. + def kitBaseVersion = + target.findProperty('VERSION') ?: target.rootProject.findProperty('VERSION') ?: '+' target.dependencies.add('api', 'com.mparticle:android-kit-base:' + kitBaseVersion) target.dependencies.add('testImplementation', 'junit:junit:4.13.2') target.dependencies.add('testImplementation', 'org.mockito:mockito-core:1.10.19') @@ -57,5 +58,47 @@ class KitPlugin implements Plugin { // no-op: publish plugin unavailable outside monorepo } } + + /** + * When true, {@code com.mparticle} artifacts (e.g. android-kit-base, android-kit-plugin) resolve + * only from {@code mavenLocal()}; Maven Central / Google are not queried for that group. + * Use after {@code publishMavenPublicationToMavenLocal} so CI and monorepo kit builds use the + * freshly published local artifacts. Enable with {@code -Pmparticle.kit.mparticleFromMavenLocalOnly=true} + * or env {@code MPARTICLE_KIT_FROM_MAVEN_LOCAL_ONLY=true}. + */ + private static boolean resolveMparticleFromMavenLocalOnly(Project target) { + String prop = target.findProperty('mparticle.kit.mparticleFromMavenLocalOnly')?.toString() + if (prop != null && Boolean.parseBoolean(prop)) { + return true + } + String env = System.getenv('MPARTICLE_KIT_FROM_MAVEN_LOCAL_ONLY') + return env != null && 'true'.equalsIgnoreCase(env) + } + + private static void configureRepositories(RepositoryHandler repositories, boolean mparticleFromMavenLocalOnly) { + if (mparticleFromMavenLocalOnly) { + // Root build scripts may have already attached unfiltered repos. Rebuild this + // project's repository chain so com.mparticle cannot resolve outside mavenLocal(). + def existingRepos = repositories.toList() + existingRepos.each { repo -> + repositories.remove(repo) + } + repositories.mavenLocal { + content { + includeGroup 'com.mparticle' + } + } + repositories.google() + repositories.mavenCentral { + content { + excludeGroup 'com.mparticle' + } + } + } else { + repositories.mavenLocal() + repositories.google() + repositories.mavenCentral() + } + } } 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..21458a419 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" @@ -138,7 +140,7 @@ abstract class AdobeKitBase : dcsRegion, pushId, gaid, - userIdentities, + currentUser?.userIdentities ?: emptyMap(), ) } 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..0d34f23bd 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 @@ -31,11 +31,13 @@ import com.mparticle.commerce.Product import com.mparticle.consent.ConsentState import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility +import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONArray import org.json.JSONException import org.json.JSONObject import java.math.BigDecimal import java.util.LinkedList +import com.mparticle.kits.KitIntegration.AttributeListener /** * mParticle Kit wrapper for the AppsFlyer SDK @@ -43,7 +45,8 @@ import java.util.LinkedList class AppsFlyerKit : KitIntegration(), KitIntegration.EventListener, - KitIntegration.AttributeListener, + AttributeListener, + 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..c49dcfc8d 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 @@ -35,6 +35,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 com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,6 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + 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..c49dcfc8d 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 @@ -35,6 +35,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 com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,6 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + 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..c49dcfc8d 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 @@ -35,6 +35,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 com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,6 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + 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..c49dcfc8d 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 @@ -35,6 +35,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 com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,6 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + 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/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt b/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt index b0c137b24..fd378d05e 100644 --- a/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt +++ b/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt @@ -77,7 +77,7 @@ class LeanplumKit : generateLeanplumUserId( it, settings, - userIdentities, + it.userIdentities ?: emptyMap(), )?.ifEmpty { null } } 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..0418f1683 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 @@ -7,6 +7,7 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.commerce.Product import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.urbanairship.Airship import com.urbanairship.Autopilot import com.urbanairship.PrivacyManager @@ -19,6 +20,7 @@ import com.urbanairship.push.PushMessage import com.urbanairship.push.PushProviderBridge import java.math.BigDecimal import java.util.LinkedList +import com.mparticle.kits.KitIntegration.AttributeListener /** * mParticle-Urban Airship Kit integration @@ -28,7 +30,8 @@ class UrbanAirshipKit : KitIntegration.PushListener, KitIntegration.EventListener, CommerceListener, - KitIntegration.AttributeListener { + AttributeListener, + LogoutListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null