Mixpanel

Mixpanel is an analytics and marketing automation product. You can track Rover events into Mixpanel to use it for either or both using the following sample integration. You may need to customize it to get the best value out of the tool.


Mapping Rover Events to Mixpanel Events

After integrating both the Rover and Mixpanel SDKs into your project, your goal will be to send the Rover events to Mixpanel as Mixpanel events.


Create a Listener for Rover Events

Rover.shared?.eventEmitter?.addEventListener(object : RoverEventListener {
     // see below for implementations.
})

Experience Viewed

We’ll use Mixpanel’s timeEvent and trackMap methods to aggregate the Presented and Dismissed events so a duration will be calculated by Mixpanel.

override fun onExperiencePresented(event: RoverEvent.ExperiencePresented) {
    mixpanel.timeEvent("Rover Experience Viewed")
}
override fun onExperienceDismissed(event: RoverEvent.ExperienceDismissed) {
    val campaignId = event.campaignId
    val attributes = mutableMapOf(
        "experienceID" to event.experience.id,
        "experienceName" to event.experience.name
    )

    event.campaignId?.let {
        attributes.put("campaignID", it)
    }

    mixpanel.trackMap(
        "Rover Experience Viewed",
        attributes
    )
}

Screen Viewed

We’ll use Mixpanel’s timeEvent and trackMap methods to aggragate the Presented and Dismissed events so a duration will be calculated by Mixpanel.

override fun onScreenPresented(event: RoverEvent.ScreenPresented) {
    mixpanel.timeEvent("Rover Screen Viewed")
}
override fun onScreenDismissed(event: RoverEvent.ScreenDismissed) {
    val attributes = mutableMapOf(
        "experienceID" to event.experience.id,
        "experienceName" to event.experience.name,
        "screenID" to event.screen.id,
        "screenName" to event.screen.name,
    )

    event.campaignId?.let {
        attributes.put("campaignID", it)
    }

    mixpanel.trackMap(
        "Rover Experience Viewed",
        attributes
    )
}

Block Tapped

override fun onBlockTapped(event: RoverEvent.BlockTapped) {
    val attributes = mutableMapOf(
        "experienceID" to event.experience.id,
        "experienceName" to event.experience.name,
        "screenID" to event.screen.id,
        "screenName" to event.screen.name,
        "blockID" to event.block.id,
        "blockName" to event.block.name
    )

    event.campaignId?.let {
        attributes.put("campaignID", it)
    }

    mixpanel.trackMap(
        "Rover Block Tapped",
        attributes
    )
}

Poll Answered

override fun onPollAnswered(event: RoverEvent.PollAnswered) {
    val attributes = mutableMapOf(
        "experienceID" to event.experience.id,
        "experienceName" to event.experience.name,
        "screenID" to event.screen.id,
        "screenName" to event.screen.name,
        "blockID" to event.block.id,
        "blockName" to event.block.name,
        "optionID" to event.option.id,
        "optionText" to event.option.text
    )

    event.option.image?.let {
        attributes.put("optionImage", it)
    }

    event.campaignId?.let {
        attributes.put("campaignID", it)
    }

    mixpanel.trackMap(
        "Rover Poll Answered",
        attributes
    )
}