Getting Started
The Mixpanel Java library is useful for tracking events from Java servers. The Full API Reference, Library Source Code and an Example Application is documented in our GitHub repo.Installing the Library
To install the library, declare it as a dependency in your project’spom.xml file:
If you’re not using Maven to build your project, you can browse and download the library jar directly from Maven central.
MessageBuilder, MixpanelAPI, and ClientDelivery classes in to your code.
The library sends data by using MessageBuilder to create payload messages, using ClientDelivery to bundle the messages, then using MixpanelAPI to push the bundles into Mixpanel.
The MessageBuilder instance must be initialized with your project token.
Sending Events
To send events, use theevent() method under the MessageBuilder class to create the event message payload by providing a distinct_id, event name, and any event properties. The JSONObjects produced by MessageBuilder are completely self-contained, and can be sent over a network or enqueued for later processing.
Then bundle the events using ClientDelivery, and send them to your project with MixpanelAPI. This will trigger a request to the /track API endpoint to ingest the events into your project.
The /track endpoint will only validate events with timestamps within the last 5 days of the request. Events with timestamps older than 5 days will not be ingested. See below on best practices for historical imports.
$city, $region, mp_country_code) using the IP address on the incoming request. As all server-side calls will likely originate from the same IP (that is, the IP of your server), this can have the unintended effect of setting the location of all of your users to the location of your data center. Learn more about best practices for geolocation..
Importing Historical Events
The Java SDK is a tracking SDK designed for real-time tracking in a server-side environment. WhenMixpanelAPI detects an event message, it triggers a request to our /track API endpoint to send the payload to your project, which will validate for events with a timestamp that is within the last 5 days of the request. Events older than 5 days will not be ingested.
For bulk import of historical events older than 5 days, we will need to use the /import API endpoint which is optimized for scripting and supports ingesting historical data. We recommend the Python SDK (see the .import_data() function) and mixpanel-utils module (see the import_events() function) which both leverages the /import API for event ingestion.
Managing User Identity
Since the Java SDK is a server-side library, IDs are not generated by the SDK. Instead, you will need to generate and manage the distinct_id yourself and include it in your events and profile data. Learn more about server-side identity management.Storing User Profiles
Create user profiles by setting profile properties to describe them. Example profile properties include “name”, “email”, “company”, and any other demographic details about the user. The Java SDK provides a few methods for setting profile properties, which will trigger requests to the /engage API endpoint. Mixpanel determines default geolocation data ($city, $region, mp_country_code) using the IP address on the incoming request. As all server-side calls will likely originate from the same IP (that is, the IP of your server), this can have the unintended effect of setting the location of all of your users to the location of your data center. Learn more about best practices for geolocation..
Setting Profile Properties
To set profile properties, create a profile update message payload withMessageBuilder.set. Then send it to your project with MixpanelAPI.
If a profile property already exists, it will be overwritten with the latest value provided in the method. If a profile property does not exist, it will be added to the profile.
Example Usage
Other Types of Profile Updates
There are a few other methods for setting profile properties by creating different messages usingMessageBuilder. See a complete reference of the available methods here
A few commonly used people methods are highlighted below:
- setOnce()
- append()
- union()
- increment()
The
MessageBuilder.setOnce() method set profile properties only if they do not exist yet. If it is setting a profile property that already exists, it will be ignored.Use this method if you want to set profile properties without the risk of overwriting existing data.Example UsageJava
Group Analytics
Read more about Group Analytics before proceeding. You will need to have the group key defined in your project settings first.
group_key and group_id.
group_keyis the event property that connects event data to a group. (e.g.company)group_idis the identifier for a specific group. (e.g.mixpanel,company_a,company_b, etc.)
Sending Group Identifiers With Events
All events must have the group key as an event property in order to be attributed to a group. Without the group key, an event cannot be attributed to a group. To send group identifiers with your events, set thegroup_key as an event property with the group_id as the value.
Example Usage
group_key value as a list of multiple group_id values.
Example Usage
Adding Group Identifiers to User Profiles
To connect group information to a user profile, include thegroup_key and group_id as a user profile property using the .set() call.
Setting Group Profile Properties
Create a group profile by setting group properties, similar to a user profile. For example, you may want to describe a company group with properties such as “ARR”, “employee_count”, and “subscription”. To set group profile properties, use theMessageBuilder.groupSet() function, which will trigger a request to the /groups API endpoint.
Example Usage
Other Group Profile Methods
See all of the group methods under theMessageBuilder class here.
A few commonly used group methods are highlighted below:
- .groupSetOnce()
- .groupUnset()
- .groupUnion()
- .groupRemove()
The
MessageBuilder.groupSetOnce() method set group profile properties only if they do not exist yet. If it is setting a profile property that already exists, it will be ignored.Use this method if you want to set group profile properties without the risk of overwriting existing data.Example UsagePrivacy-Friendly Tracking
You have control over the data you send to Mixpanel. The Ruby SDK have a few configurations to help you protect user data. Since this is a server-side tracking library where you have control of the servers, your server is responsible for determining whether to send data about a particular user or not.EU Data Residency
Route data to Mixpanel’s EU servers by passing in positional arguments into theMixpanelAPI constructor:
Example Usage
India Data Residency
Route data to Mixpanel’s India servers by passing in positional arguments into theMixpanelAPI constructor:
Example Usage
Disable Geolocation
The Java SDK parse the request IP address to generate geolocation properties for events and profiles. You may want to disable them to prevent the unintentional setting of your data’s geolocation to the location of your server that is sending the request, or to prevent geolocation data from being tracked entirely. To disable geolocation, set theip of your events and profile updates to 0.
Example Usage