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.


Experience Viewed

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

NotificationCenter.default.addObserver(forName: ExperienceViewController.experiencePresentedNotification, object: nil, queue: nil) { notification in    
    Mixpanel.mainInstance().time(event: "Rover Experience Viewed")
}
NotificationCenter.default.addObserver(forName: ExperienceViewController.experienceDismissedNotification, object: nil, queue: nil) { notification in
    let experience = notification.userInfo?[ExperienceViewController.experienceUserInfoKey] as! Experience
    
    var attributes: [String: String] = [
        "experienceID": experience.id,
        "experienceName": experience.name
    ]
    
    if let campaignID = notification.userInfo?[ExperienceViewController.campaignIDUserInfoKey] as? String {
        attributes["campaignID"] = campaignID
    }
    
    Mixpanel.mainInstance().track(event: "Rover Experience Viewed", properties: attributes)
}

Screen Viewed

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

NotificationCenter.default.addObserver(forName: ScreenViewController.screenPresentedNotification, object: nil, queue: nil) { notification in
    Mixpanel.mainInstance().time(event: "Rover Screen Viewed")
}
NotificationCenter.default.addObserver(forName: ScreenViewController.screenDismissedNotification, object: nil, queue: nil) { notification in
    let experience = notification.userInfo?[ScreenViewController.experienceUserInfoKey] as! Experience
    let screen = notification.userInfo?[ScreenViewController.screenUserInfoKey] as! Screen
    
    var attributes: [String: String] = [
        "experienceID": experience.id,
        "experienceName": experience.name,
        "screenID": screen.id,
        "screenName": screen.name
    ]
    
    if let campaignID = notification.userInfo?[ScreenViewController.campaignIDUserInfoKey] as? String {
        attributes["campaignID"] = campaignID
    }
    
    Mixpanel.mainInstance().track(event: "Rover Screen Viewed", properties: attributes)
}

Block Tapped

NotificationCenter.default.addObserver(forName: ScreenViewController.blockTappedNotification, object: nil, queue: nil) { notification in
    let experience = notification.userInfo?[ScreenViewController.experienceUserInfoKey] as! Experience
    let screen = notification.userInfo?[ScreenViewController.screenUserInfoKey] as! Screen
    let block = notification.userInfo?[ScreenViewController.blockUserInfoKey] as! Block
    
    var attributes: [String: String] = [
        "experienceID": experience.id,
        "experienceName": experience.name,
        "screenID": screen.id,
        "screenName": screen.name,
        "blockID": block.id,
        "blockName": block.name,
    ]
    
    if let campaignID = notification.userInfo?[ScreenViewController.campaignIDUserInfoKey] as? String {
        attributes["campaignID"] = campaignID
    }
    
    Mixpanel.mainInstance().track(event: "Rover Block Tapped", properties: attributes)
}

Poll Answered

NotificationCenter.default.addObserver(forName: ScreenViewController.pollAnsweredNotification, object: nil, queue: nil) { notification in
    let experience = notification.userInfo?[ExperienceViewController.experienceUserInfoKey] as! Experience
    let screen = notification.userInfo?[ScreenViewController.screenUserInfoKey] as! Screen
    let block = notification.userInfo?[ScreenViewController.blockUserInfoKey] as! PollBlock
    let option = notification.userInfo?[ScreenViewController.optionUserInfoKey] as! PollOption
    
    var attributes: [String: String] = [
        "experienceID": experience.id,
        "experienceName": experience.name,
        "screenID": screen.id,
        "screenName": screen.name,
        "blockID": block.id,
        "blockName": block.name,
        "optionID": option.id,
        "optionText": option.text.rawValue
    ]
    
    if let campaignID = notification.userInfo?[ScreenViewController.campaignIDUserInfoKey] as? String {
        attributes["campaignID"] = campaignID
    }
    
    Mixpanel.mainInstance().track(event: "Rover Poll Answered", properties: attributes)
}