Developers
API References
Data Subject Request API

Data Subject Request API Version 1 and 2

Data Subject Request API Version 3

Platform API

Key Management

Platform API Overview

Accounts

Apps

Audiences

Calculated Attributes

Data Points

Feeds

Field Transformations

Services

Users

Workspaces

Warehouse Sync API

Warehouse Sync API Overview

Warehouse Sync API Tutorial

Warehouse Sync API Reference

Data Mapping

Warehouse Sync SQL Reference

Warehouse Sync Troubleshooting Guide

ComposeID

Warehouse Sync API v2 Migration

Audit Logs API

Calculated Attributes Seeding API

Bulk Profile Deletion API Reference

Custom Access Roles API

Data Planning API

Household Reach API Reference

Pixel Service

Profile API

Events API

mParticle JSON Schema Reference

IDSync

Guides
Partners

Introduction

Outbound Integrations

Outbound Integrations

Firehose Java SDK

Inbound Integrations

Kit Integrations

Overview

Android Kit Integration

JavaScript Kit Integration

iOS Kit Integration

Compose ID

Data Hosting Locations

Glossary

Migrate from Segment to mParticle

Migrate from Segment to mParticle

Migrate from Segment to Client-side mParticle

Migrate from Segment to Server-side mParticle

Segment-to-mParticle Migration Reference

Rules Developer Guide

Client SDKs
AMP

AMP SDK

Android

Initialization

Configuration

Network Security Configuration

Event Tracking

User Attributes

IDSync

Screen Events

Commerce Events

Location Tracking

Media

Kits

Application State and Session Management

Data Privacy Controls

Error Tracking

Opt Out

Push Notifications

WebView Integration

Logger

Preventing Blocked HTTP Traffic with CNAME

Workspace Switching

Linting Data Plans

Troubleshooting the Android SDK

API Reference

Upgrade to Version 5

Upgrade to Version 6

Cordova

Cordova Plugin

Identity

Upgrade to Version 5

Direct Url Routing

Direct URL Routing FAQ

Web

Android

iOS

Flutter

Getting Started

Usage

API Reference

iOS

Workspace Switching

Initialization

Configuration

Event Tracking

User Attributes

IDSync

Screen Tracking

Commerce Events

Location Tracking

Media

Kits

Application State and Session Management

Data Privacy Controls

Error Tracking

Opt Out

Push Notifications

Webview Integration

Upload Frequency

Preventing Blocked HTTP Traffic with CNAME

Linting Data Plans

Troubleshooting iOS SDK

Social Networks

iOS 14 Guide

iOS 15 FAQ

iOS 16 FAQ

iOS 17 FAQ

iOS 18 FAQ

API Reference

Upgrade to Version 7

Upgrade to Version 9

.NET MAUI

Getting Started

Identity

React Native

Getting Started

Identity

Upgrade to Version 4

Roku

Getting Started

Identity

Media

Unity

Upload Frequency

Getting Started

Opt Out

Initialize the SDK

Event Tracking

Commerce Tracking

Error Tracking

Screen Tracking

Identity

Location Tracking

Session Management

Xbox

Getting Started

Identity

Web

Initialization

Configuration

Content Security Policy

Event Tracking

User Attributes

IDSync

Page View Tracking

Commerce Events

Location Tracking

Media

Kits

Application State and Session Management

Data Privacy Controls

Error Tracking

Opt Out

Custom Logger

Persistence

Native Web Views

Self-Hosting

Multiple Instances

Web SDK via Google Tag Manager

Preventing Blocked HTTP Traffic with CNAME

Facebook Instant Articles

Troubleshooting the Web SDK

Browser Compatibility

Linting Data Plans

API Reference

Upgrade to Version 3 of the SDK

Alexa

Media SDKs

Android

iOS

Web

Quickstart
Android

Overview

Step 1. Create an input

Step 2. Verify your input

Step 3. Set up your output

Step 4. Create a connection

Step 5. Verify your connection

Step 6. Track events

Step 7. Track user data

Step 8. Create a data plan

Step 9. Test your local app

HTTP Quick Start

Step 1. Create an input

Step 2. Create an output

Step 3. Verify output

iOS Quick Start

Overview

Step 1. Create an input

Step 2. Verify your input

Step 3. Set up your output

Step 4. Create a connection

Step 5. Verify your connection

Step 6. Track events

Step 7. Track user data

Step 8. Create a data plan

Java Quick Start

Step 1. Create an input

Step 2. Create an output

Step 3. Verify output

Node Quick Start

Step 1. Create an input

Step 2. Create an output

Step 3. Verify output

Python Quick Start

Step 1. Create an input

Step 2. Create an output

Step 3. Verify output

Web

Overview

Step 1. Create an input

Step 2. Verify your input

Step 3. Set up your output

Step 4. Create a connection

Step 5. Verify your connection

Step 6. Track events

Step 7. Track user data

Step 8. Create a data plan

Server SDKs

Node SDK

Go SDK

Python SDK

Ruby SDK

Java SDK

Tools

mParticle Command Line Interface

Smartype

Linting Tools

API Credential Management

The Developer's Guided Journey to mParticle

Guides
Platform Overview

Introduction

Navigating mParticle

The Overview Map

Getting Started

Create an Input

Start capturing data

Connect an Event Output

Create an Audience

Connect an Audience Output

Transform and Enhance Your Data

mParticle Agent

Overview

Explore Your Data

Build Audiences

Create Predictions

Data and Privacy

mParticle Agent FAQ

Oversight

System Alerts

Observability

Observability Overview

Observability User Guide

Observability Troubleshooting Examples

Observability Span Glossary

Privacy

Data Subject Requests

Consent Filters

Data Privacy Controls

Data Platform

Trends

Setup

Connections

Feeds

Import Data with CSV Files

Import Data with CSV Files

CSV File Reference

SFTP Credentials

Live Stream

Data Catalog

Rules

Plans

Filters

Event Forwarding

Event Match Quality

Data Retention

Tiered Events

Blocked Data Backfill Guide

Data Warehouse
Composable Audiences

Warehouse Setup Overview

Connections

Connections Overview

Google BigQuery

Databricks

Amazon Redshift

Snowflake

Data Models

Data Models Overview

Create a User Data Model

Create an Event Data Model

Create a Generic Data Model

Warehouse Sync

Warehouse Sync User Guide

Historical Data and Warehouse Sync

Customer 360

Overview

User Profiles

Overview

User Profiles

Identity Dashboard

Identity Resolution Log

Household Reach

Calculated Attributes

Calculated Attributes Overview

Using Calculated Attributes

Create with AI Assistance

Calculated Attributes Reference

Predictions

Predictions Overview

What's Changed in the New Predictions UI

View and Manage Predictions

Predict Future Behavior

Future Behavior Predictions Overview

Create Future Behavior Prediction

Manage Future Behavior Predictions

Create an Audience with Future Behavior Predictions

Next Best Action

Next Best Action Overview

Create a Next Best Action Prediction

Manage Next Best Actions

Create an Audience with Next Best Actions

Find Similar Customers

Similar Customer Predictions Overview

Create Similar Customer Prediction

Manage Similar Customer Predictions

Build an Audience with Similar Customer Predictions

IDSync

IDSync Overview

Use Cases for IDSync

Components of IDSync

Store and Organize User Data

Identify Users

Default IDSync Configuration

Profile Conversion Strategy

Profile Link Strategy

Profile Isolation Strategy

Best Match Strategy

Aliasing

Analytics

Introduction

Core Analytics (Beta)

Analytics Free Trial

Setup

Sync and Activate Analytics User Segments in mParticle

User Segment Activation

Welcome Page Announcements

Settings

Project Settings

Roles and Teammates

Organization Settings

Global Project Filters

Portfolio Analytics

Analytics Data Manager

Analytics Data Manager Overview

Events

Event Properties

User Properties

Revenue Mapping

Export Data

UTM Guide

Analyses

Analyses Introduction

Segmentation: Basics

Getting Started

Visualization Options

For Clauses

Date Range and Time Settings

Calculator

Numerical Settings

Segmentation: Advanced

Assisted Analysis

Properties Explorer

Frequency in Segmentation

Trends in Segmentation

Did [not] Perform Clauses

Cumulative vs. Non-Cumulative Analysis in Segmentation

Total Count of vs. Users Who Performed

Save Your Segmentation Analysis

Export Results in Segmentation

Explore Users from Segmentation

Funnels: Basics

Getting Started with Funnels

Group By Settings

Conversion Window

Tracking Properties

Date Range and Time Settings

Visualization Options

Interpreting a Funnel Analysis

Funnels: Advanced

Group By

Filters

Conversion over Time

Conversion Order

Trends

Funnel Direction

Multi-path Funnels

Analyze as Cohort from Funnel

Save a Funnel Analysis

Explore Users from a Funnel

Export Results from a Funnel

Cohorts

Getting Started with Cohorts

Analysis Modes

Save a Cohort Analysis

Export Results

Explore Users

Saved Analyses

Manage Analyses in Dashboards

Journeys

Getting Started

Event Menu

Visualization

Ending Event

Save a Journey Analysis

Users

Getting Started

User Activity Timelines

Time Settings

Export Results

Save A User Analysis

Query Builder

Data Dictionary

Query Builder Overview

Modify Filters With And/Or Clauses

Query-time Sampling

Query Notes

Filter Where Clauses

Event vs. User Properties

Group By Clauses

Annotations

Cross-tool Compatibility

Apply All for Filter Where Clauses

Date Range and Time Settings Overview

User Attributes at Event Time

Understanding the Screen View Event

User Aliasing

Dashboards

Dashboards––Getting Started

Manage Dashboards

Dashboard Filters

Organize Dashboards

Scheduled Reports

Favorites

Time and Interval Settings in Dashboards

Query Notes in Dashboards

Analytics Resources

The Demo Environment

Keyboard Shortcuts

User Segments

Tutorials

Analytics for Marketers

Analytics for Product Managers

Compare Conversion Across Acquisition Sources

Analyze Product Feature Usage

Identify Points of User Friction

Time-based Subscription Analysis

Dashboard Tips and Tricks

Understand Product Stickiness

Optimize User Flow with A/B Testing

APIs

User Segments Export API

Dashboard Filter API

Analytics (Deprecated)
Identity Providers

Single Sign-On (SSO)

Setup Examples

Settings

Debug Console

Data Warehouse Delay Alerting

Introduction

Developer Docs

Introduction

Integrations

Introduction

Rudderstack

Google Tag Manager

Segment

Data Warehouses and Data Lakes

AWS Kinesis (Snowplow)

Advanced Data Warehouse Settings

AWS Redshift (Define Your Own Schema)

AWS S3 Integration (Define Your Own Schema)

AWS S3 (Snowplow Schema)

BigQuery (Snowplow Schema)

BigQuery Firebase Schema

BigQuery (Define Your Own Schema)

GCP BigQuery Export

Snowflake (Snowplow Schema)

Snowplow Schema Overview

Snowflake (Define Your Own Schema)

APIs

Dashboard Filter API (Deprecated)

REST API

User Segments Export API (Deprecated)

SDKs

SDKs Introduction

React Native

iOS

Android

Java

JavaScript

Python

Object API

Developer Basics

Aliasing

Audiences

Audiences Overview

Create an Audience

Connect an Audience

Manage Audiences

Audience Insights

Audience Sharing

Match Boost

Inclusive & Exclusive Audiences (Early Access)

Inclusive & Exclusive Audiences Overview

Using Logic Blocks in Audiences

Combining Inclusive and Exclusive Audiences

Inclusive & Exclusive Audiences FAQ

Audience Expansion

Predictive Audiences

Predictive Audiences Overview

Using Predictive Audiences

Composable Audiences

Composable Audiences Overview

User Guide

User Guide Overview

Audience Setup

Frequently Asked Questions

Settings
Platform

Platform Configuration

mParticle Users and Roles

Key Management

Notifications

Audit Logs

Billing

Usage and Billing Report

Usage metering for value-based pricing (VBP)

Troubleshooting mParticle

Default Service Limits

Glossary

Integrations
24i

Event

Aarki

Audience

ABTasty

Audience

Actable

Feed

AdChemix

Event

Adikteev

Audience

Event

AdMedia

Audience

Adjust

Event

Feed

Adobe Marketing Cloud

Cookie Sync

Server-to-Server Events

Platform SDK Events

Adobe Audience Manager

Audience

Adobe Campaign Manager

Audience

Adobe Experience Platform

Event

Adobe Target

Audience

AdPredictive

Feed

AgilOne

Event

Airship

Audience

Feed

Event

Algolia

Event

Amazon Kinesis

Event

Amazon Advertising

Audience

Event

Amazon Kinesis Firehose

Event

Audience

Amazon SNS

Event

Amazon S3

Audience

Event

Amazon Redshift

Data Warehouse

Amazon SQS

Event

Amobee

Audience

Amplitude

Event

Forwarding Data Subject Requests

Analytics

Audience

Forwarding Data Subject Requests

Event

Ampush

Audience

Event

Anodot

Event

AppLovin

Audience

Event

Antavo

Feed

AppsFlyer

Event

Feed

Forwarding Data Subject Requests

Apptentive

Event

Apptimize

Event

Attentive

Event

Feed

Awin

Event

Microsoft Azure Blob Storage

Event

Batch

Audience

Event

Bidease

Audience

Bluecore

Event

Bing Ads

Event

Bluedot

Feed

Branch

Event

Forwarding Data Subject Requests

Feed

Blueshift

Event

Feed

Forwarding Data Subject Requests

Bugsnag

Event

Branch S2S Event

Event

Braze

Forwarding Data Subject Requests

Audience

Feed

Event

Button

Audience

Event

Census

Feed

Cadent

Audience

CleverTap

Audience

Event

Feed

comScore

Event

Conversant

Event

Cordial

Feed

Audience

Cortex

Event

Forwarding Data Subject Requests

Feed

Criteo

Audience

Event

Custom Feed

Custom Feed

CustomerGlu

Feed

Event

Crossing Minds

Event

Databricks

Data Warehouse

Customer.io

Audience

Feed

Event

Datadog

Event

Didomi

Event

Dynamic Yield

Audience

Event

Eagle Eye

Audience

Emarsys

Audience

Edge226

Audience

Epsilon

Event

Everflow

Audience

Facebook

Audience

Event

Google Analytics for Firebase

Event

Facebook Offline Conversions

Event

Flurry

Event

Foursquare

Audience

Feed

Flybits

Event

ForeSee

Event

FreeWheel Data Suite

Audience

Friendbuy

Event

Google Ad Manager

Audience

Google Ads

Event

Audience

Google Analytics

Event

Google BigQuery

Audience

Data Warehouse

Google Analytics 4

Event

Google Cloud Storage

Event

Audience

Google Marketing Platform

Audience

Cookie Sync

Event

Google Enhanced Conversions

Event

Google Marketing Platform Offline Conversions

Event

Google Pub/Sub

Event

Heap

Event

Google Tag Manager

Event

Herow

Feed

Hightouch

Feed

Hyperlocology

Event

Ibotta

Event

ID5

Kit

InMarket

Audience

Insider

Audience

Event

Feed

Impact

Event

InMobi

Audience

Event

Inspectlet

Event

Intercom

Event

iPost

Feed

Audience

Iterable

Audience

Event

Feed

ironSource

Audience

Jampp

Audience

Event

Kafka

Event

Kayzen

Audience

Event

Klaviyo

Audience

Event

Kissmetrics

Event

Kochava

Feed

Event

Forwarding Data Subject Requests

Kubit

Event

LaunchDarkly

Feed

LifeStreet

Audience

LinkedIn

Audience

LinkedIn Conversions API Integration

Leanplum

Audience

Event

Feed

Liftoff

Audience

Event

LiveLike

Event

Liveramp

Audience

MadHive

Audience

Localytics

Event

mAdme Technologies

Event

Marigold

Audience

Mailchimp

Audience

Event

Feed

Mautic

Audience

Event

MediaMath

Audience

Mediasmart

Audience

Microsoft Azure Event Hubs

Event

Microsoft Ads

Microsoft Ads Audience Integration

Mixpanel

Audience

Event

Forwarding Data Subject Requests

Mixpanel Cohort Feed Integration

Mintegral

Audience

MoEngage

Audience

Feed

Event

Moloco

Audience

Event

Monetate

Event

Movable Ink

Event

Movable Ink - V2

Event

Multiplied

Event

myTarget

Event

Audience

Nami ML

Feed

Nanigans

Event

Narrative

Audience

Event

Feed

NCR Aloha

Event

Neura

Event

OneTrust

Event

OpenAI

Event

Optimizely

Audience

Event

Oracle BlueKai

Event

Oracle Responsys

Audience

Event

Paytronix

Feed

Personify XP

Event

PieEye

Inbound Data Subject Requests

Persona.ly

Audience

Pilgrim

Feed

Event

Pinterest

Audience

Event

Postie

Audience

Event

Plarin

Event

Punchh

Audience

Event

Feed

Primer

Event

Pushwoosh

Audience

Event

Qualtrics

Event

Quantcast

Event

Apteligent

Event

Radar

Event

Feed

Regal

Event

Reveal Mobile

Event

Remerge

Event

Audience

Retina AI

Event

Feed

RevenueCat

Feed

Rokt

Audience

Rokt Thanks and Pay+

Event

RTB House

Audience

Event

Sailthru

Audience

Event

Salesforce Email

Audience

Event

Feed

Salesforce Mobile Push

Event

Salesforce Sales and Service Cloud

Feed

Event

Samba TV

Audience

Event

Reddit

Audience

Event

Scalarr

Event

SendGrid

Audience

Feed

SFTP

Audience

ShareThis

Audience

Feed

Shopify

Custom Pixel

Feed

SessionM

Feed

Event

SimpleReach

Event

Singular

Event

Feed

Skyhook

Event

Slack

Event

Smadex

Audience

Singular-DEPRECATED

Event

SmarterHQ

Event

Snapchat

Audience

Event

Snowflake

Data Warehouse

Audience

Snapchat Conversions

Event

Snowplow

Event

Split

Event

Feed

Splunk MINT

Event

Spotify

Event

StartApp

Audience

Sprig

Audience

Event

Swrve

Event

Feed

Statsig

Event

Feed

Stormly

Audience

Event

Talon.One

Event

Audience

Feed

Loyalty Feed

Tapad

Audience

Tapjoy

Audience

Taplytics

Event

Teak

Audience

Taptica

Audience

The Trade Desk

Audience

Cookie Sync

Event

Ticketure

Feed

Treasure Data

Audience

Event

TikTok Event

Audience

Audience (Deprecated)

Audience Migration

Event

Triton Digital

Audience

TUNE

Event

Twitter

Audience

Event

Valid

Event

Vkontakte

Audience

Vibe

Audience

Voucherify

Audience

Event

Webhook

Event

Vungle

Audience

Webtrends

Event

Xandr

Audience

Cookie Sync

White Label Loyalty

Event

X

Event

Wootric

Event

Yahoo (formerly Verizon Media)

Audience

Cookie Sync

Yotpo

Feed

YouAppi

Audience

Z2A Digital

Audience

Event

Zendesk

Event

Feed

Rakuten

Event

Getting Started

With React Native, use a single code base to deploy features to multiple platforms. The mParticle React Native library helps you leverage a single API to deploy your data to hundreds of integrations from your iOS and Android apps.

Android and iOS support methods for custom events, page views, identity, commerce events, and consent.

Requirements: This guide covers mParticle React Native SDK 4.x, which requires React Native 0.76 or later and supports the New Architecture. The iOS deployment target is 15.6 or later. Native SDK versions are defined by your installed wrapper release.

Upgrading an existing app? Follow Upgrade to Version 4 for the iOS dependency changes and the Rokt placeholder API migration.

Installation

Install the library from npm:

$ npm install react-native-mparticle --save

For clients using the react-native-tvos library you must add the force flag to the install code as shown below. This tells the installer to ignore using the core React Native repository and instead use the tvOS-specific library instead.

$ npm install react-native-mparticle --save --force

If any tvOS target in your Podfile uses react-native-mparticle, use the CocoaPods fallback for the entire Podfile. The default Swift Package Manager integration supports iOS only. The minimum tvOS deployment target is 15.6.

Next, copy the key and secret provided for your configured platform input in Data Platform > Setup > Inputs and then follow the OS-specific instructions for the platform you are using below.

Expo

If your app uses Expo, install the package and expo-build-properties:

npx expo install react-native-mparticle expo-build-properties

Configure the bundled config plugin in your app.json. Set the iOS deployment target with expo-build-properties; the mParticle plugin does not set it:

{
  "expo": {
    "plugins": [
      [
        "react-native-mparticle",
        {
          "iosApiKey": "<<<iOS App Key>>>",
          "iosApiSecret": "<<<iOS App Secret>>>",
          "androidApiKey": "<<<Android App Key>>>",
          "androidApiSecret": "<<<Android App Secret>>>"
        }
      ],
      [
        "expo-build-properties",
        {
          "ios": {
            "deploymentTarget": "15.6"
          }
        }
      ]
    ]
  }
}

Then run npx expo prebuild --clean followed by npx expo run:ios or npx expo run:android. The plugin generates the native initialization described below, so bare React Native apps should follow the iOS and Android steps instead.

The plugin uses Swift Package Manager for the iOS mParticle SDK and kits by default. Add these optional settings to the react-native-mparticle plugin options:

Option Description
iosKits Kit names from the maintained kit catalog, such as ["mParticle-Rokt"]. With SPM, an unknown name stops prebuild with an error.
iosDependencyManager "spm" (default) or "cocoapods" (deprecated). A tvOS target using this wrapper requires "cocoapods".
iosSdkVersion Optional exact Apple SDK version override. Omit it to use the default tested with your installed wrapper release. Also supplies the version for kits without an explicit version.
iosSpmKits Custom SPM kits as { "url": "PACKAGE_REPOSITORY_URL", "product": "PACKAGE_PRODUCT", "version": "EXACT_VERSION" } objects. version is optional and defaults to the core version.

For example, add "iosKits": ["mParticle-Rokt"] for standard Rokt placements. See Rokt setup for Shoppable Ads and Android kits.

When Expo regenerates the native projects, a previously generated Package.resolved is lost. With the same wrapper release and configuration, the plugin uses that release’s exact default again. Set iosSdkVersion only when you intentionally want to override it; kits without an explicit version use the core version. The default SPM setup always links the core Swift package, including in apps without kits, so import mParticle_Apple_SDK resolves.

Run npx expo prebuild --clean whenever you change iosDependencyManager in either direction to remove the previous mode’s Podfile settings and package links. With "iosDependencyManager": "cocoapods", also follow the Swift umbrella-pod guidance if you have no iOS kits.

iOS

React Native and react-native-mparticle install with CocoaPods. From version 4.0, pod install links the mParticle core SDK and its kits into your app target as Swift packages by default.

Swift Package Manager (default)

Set your iOS deployment target to 15.6 or later in ios/Podfile, and update any app target or extension pinned to a lower version:

platform :ios, '15.6'

The core SDK is linked automatically. If you use kits, list them by name before the first target block:

# Optional kits, before the first target block
$RNMParticleSPMKits = ['mParticle-Rokt']

By default, Swift Package Manager installs the exact Apple SDK version selected and tested for your installed react-native-mparticle release. Kits without an explicit version use the core SDK version. Leave $RNMParticleSPMCoreVersion unset to use this default; set it before the first target block only when you intentionally want to override it with another compatible exact version.

To check the default for your installed release, read DEFAULT_CORE_VERSION in node_modules/react-native-mparticle/ios/mparticle_spm.rb (source).

Use names from the maintained kit catalog. For a kit outside that catalog, add a hash to $RNMParticleSPMKits with url:, product:, and optionally version::

$RNMParticleSPMKits = [
  { url: 'PACKAGE_REPOSITORY_URL', product: 'PACKAGE_PRODUCT', version: 'EXACT_VERSION' }
]

Replace the placeholders with your kit’s repository URL, exported product name, and exact version. Omit version: to use the core SDK version.

Run this command from ios/:

bundle exec pod install

Installation updates your app’s .xcodeproj, linking the core SDK and configured kits at exact versions. Commit the project change and ios/<App>.xcworkspace/xcshareddata/swiftpm/Package.resolved after resolving packages in Xcode. Running pod install again with the same configuration makes no further changes.

Static libraries (the React Native default), use_frameworks! :linkage => :static, and use_frameworks! :linkage => :dynamic are all supported. No mParticle pre_install hook is needed with SPM.

Do not declare mParticle or Rokt pods alongside this setup. If a pod would install a second copy of the SDK, pod install stops and lists the conflicting pods. Use the upgrade guide to migrate existing dependencies.

On each installation, kits from the catalog that are absent from $RNMParticleSPMKits are unlinked, including kits added manually. Packages from other URLs, including custom kits, must be removed manually in Xcode when no longer needed.

Troubleshooting:

Problem Resolution
pod install lists pods that would add a second SDK copy. Remove the listed pods and their entries in any dynamic-framework hook, then configure kits through $RNMParticleSPMKits.
An unknown kit name stops installation. Use a name from the kit catalog, or provide its url: and product:.
Two kits export the same product, or RoktSDKPlus and mParticle-Rokt are both listed. Choose one major version of each kit. RoktSDKPlus already includes mParticle-Rokt.
Installation says the app already links a product from another package. Remove that product and its manually added package in Xcode, or configure the intended package by url:.
A build reports a missing core Swift package, or a Debug build reports that the SDK is loaded more than once. Remove duplicate mParticle/Rokt pods and manually added SDK packages, then run pod install again.

For advanced integrations, the wrapper also supports React Native’s experimental SPM mode. That separate mode installs React Native itself through SPM and is not intended for production use.

CocoaPods (deprecated)

To install the native mParticle SDKs through CocoaPods, set $RNMParticleDisableSPM = true at the top of ios/Podfile, before any target block. This setting applies to the whole Podfile and is required if any tvOS target uses this wrapper:

$RNMParticleDisableSPM = true

This fallback is deprecated. CocoaPods trunk is scheduled to stop accepting new pods and versions on December 2, 2026; existing published versions remain available. A future wrapper release will remove the fallback.

Remove any mParticle or Rokt Swift packages still linked to your app target before building with CocoaPods. pod install warns about leftover packages, which would cause the SDK to be included twice.

For React Native’s default static-library setup, build the Apple SDK and Rokt pods as dynamic frameworks with this hook. Keep any entries needed by your other dependencies:

pre_install do |installer|
  installer.pod_targets.each do |pod|
    if ['mParticle-Apple-SDK', 'mParticle-Apple-SDK-ObjC',
        'mParticle-Apple-SDK-Swift', 'mParticle-Rokt', 'Rokt-Widget',
        'RoktContracts', 'RoktUXHelper', 'DcuiSchema'].include?(pod.name)
      def pod.build_type
        Pod::BuildType.new(:linkage => :dynamic, :packaging => :framework)
      end
    end
  end
end

For standard Rokt placements, declare the kit inside your app target:

pod 'mParticle-Rokt', 'COMPATIBLE_KIT_VERSION'

Replace COMPATIBLE_KIT_VERSION with an exact kit version compatible with your installed wrapper release. Follow the CocoaPods requirements in that release’s README (source). Do not add Rokt-Widget separately. SPM-only kits, including RoktSDKPlus, cannot use this fallback.

Swift apps without kits: This wrapper depends on mParticle-Apple-SDK-ObjC. To use import mParticle_Apple_SDK, add the Swift umbrella pod inside your app target:

pod 'mParticle-Apple-SDK', 'COMPATIBLE_CORE_VERSION'

Replace COMPATIBLE_CORE_VERSION with an exact Apple SDK version satisfying the mParticle-Apple-SDK-ObjC dependency in your installed wrapper’s react-native-mparticle.podspec (source). If the core SDK is already installed, use its resolved version from ios/Podfile.lock.

This also applies to Expo apps with a Swift AppDelegate and no iOS kits. With the CocoaPods fallback, the plugin does not add the umbrella pod; reapply the declaration after every clean prebuild. Objective-C apps can use the ObjC module directly.

Run bundle exec pod install from ios/. If your app uses frameworks, skip the pre_install hook and use either static or dynamic frameworks. To select linkage with an environment variable, your Podfile must read it:

linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
  use_frameworks! :linkage => linkage.to_sym
end
USE_FRAMEWORKS=static bundle exec pod install
# or
USE_FRAMEWORKS=dynamic bundle exec pod install

Initialize the SDK

Initialize the mParticle SDK by calling the startWithOptions method within the application:didFinishLaunchingWithOptions: delegate call. Preferably the location of the initialization method call should be one of the last statements in the application:didFinishLaunchingWithOptions:. The startWithOptions method requires an options argument containing your key and secret and an initial Identity request.

The SDK must be initialized in the application:didFinishLaunchingWithOptions: method. Other parts of the SDK rely on the UIApplicationDidBecomeActiveNotification notification to function properly. Failing to start the SDK as indicated results in errors. Also, don’t use GCD’s dispatch_async to start the SDK.

Import and start the mParticle Apple SDK into Swift or Objective-C.

On React Native 0.77+ with the New Architecture, configure RCTAppDependencyProvider on your React Native delegate before starting mParticle. For an Objective-C AppDelegate, import <ReactAppDependencyProvider/RCTAppDependencyProvider.h> and set self.dependencyProvider = [RCTAppDependencyProvider new];. Swift templates set delegate.dependencyProvider = RCTAppDependencyProvider() after importing ReactAppDependencyProvider. Without it, third-party Fabric components such as RoktLayoutView cannot register. This step does not apply to React Native 0.76.

Swift example
import mParticle_Apple_SDK

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let mParticleOptions = MParticleOptions(key: "<<<App Key Here>>>", secret: "<<<App Secret Here>>>")

    // Optional - see the Identity page for more information on building this object
    let request = MPIdentityApiRequest.withEmptyUser()
    request.email = "email@example.com"
    mParticleOptions.identifyRequest = request
    mParticleOptions.onIdentifyComplete = { (apiResult, error) in
        print("Identify complete. userId = \(apiResult?.user.userId.stringValue ?? "Null User ID") error = \(error?.localizedDescription ?? "No Error Available")")
    }

    // Optional
    mParticleOptions.onAttributionComplete = { (attributionResult, error) in
        print("Attribution complete. attributionResults = \(String(describing: attributionResult?.linkInfo))")
    }

    // Start the SDK
    MParticle.sharedInstance().start(with: mParticleOptions)

    return true
}
Objective-C example
// Apple SDK 9 ships the Objective-C headers in the mParticle_Apple_SDK_ObjC module.
#if defined(__has_include) && __has_include(<mParticle_Apple_SDK_ObjC/mParticle.h>)
    #import <mParticle_Apple_SDK_ObjC/mParticle.h>
#else
    #import "mParticle.h"
#endif

Then, start the SDK:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    MParticleOptions *mParticleOptions = [MParticleOptions optionsWithKey:@"REPLACE ME" secret:@"REPLACE ME"];

    /* Optional - Please see the Identity page for more information on building this object
    MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser];
    request.email = @"email@example.com";
    mParticleOptions.identifyRequest = request;
    mParticleOptions.onIdentifyComplete = ^(MPIdentityApiResult * _Nullable apiResult, NSError * _Nullable error) {
        NSLog(@"Identify complete. userId = %@ error = %@", apiResult.user.userId, error);
    };
    */

    [[MParticle sharedInstance] startWithOptions:mParticleOptions];

    return YES;
}

See Identity for more information about supplying an MPIdentityApiRequest object during SDK initialization.

Remember to start Metro with:

$ npm start

and build your workspace from Xcode.

Rokt setup

For standard Rokt placements on iOS, set $RNMParticleSPMKits = ['mParticle-Rokt'], or use "iosKits": ["mParticle-Rokt"] in the Expo plugin options.

For Shoppable Ads on iOS, use $RNMParticleSPMKits = ['RoktSDKPlus'], or "iosKits": ["RoktSDKPlus"] with Expo. RoktSDKPlus includes mParticle-Rokt and RoktPaymentExtension, so list only RoktSDKPlus. It is supported only through SPM.

Shoppable Ads also requires native payment-extension registration after mParticle starts and before calling selectShoppableAds. The Expo plugin installs the package but does not generate this registration; reapply it after a clean prebuild. Follow Rokt’s initialization and payment-extension instructions and placement guide.

On Android, apps using MParticle.Rokt.* or RoktLayoutView must add the Rokt kit themselves:

implementation 'com.mparticle:android-rokt-kit:COMPATIBLE_VERSION_OR_RANGE'

Replace COMPATIBLE_VERSION_OR_RANGE with the android-rokt-kit version or range declared in node_modules/react-native-mparticle/android/build.gradle for your installed wrapper release (source). The wrapper supplies android-core automatically. With Expo, use "androidKits": ["android-rokt-kit"] instead; the plugin adds the kit dependency.

The Android Rokt kit requires compileSdk 35+ and Android Gradle Plugin 8.6+. Shoppable Ads is supported only on iOS in this release.

Android

  1. Use the mParticle key and secret you copied and construct an MParticleOptions object.
  2. Call start from the onCreate method of your app’s Application class. It’s crucial that the SDK be started here for proper session management. If you don’t already have an Application class, create it and then specify its fully-qualified name in the <application> tag of your app’s AndroidManifest.xml.
package com.example.myapp;

import android.app.Application;
import com.mparticle.MParticle;
import com.mparticle.MParticleOptions;
import com.mparticle.identity.IdentityApiRequest;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // Optional - see the Identity page for more information on building this object
        IdentityApiRequest identifyRequest = IdentityApiRequest.withEmptyUser().build();

        MParticleOptions options = MParticleOptions.builder(this)
            .credentials("REPLACE ME WITH KEY", "REPLACE ME WITH SECRET")
            .logLevel(MParticle.LogLevel.VERBOSE)
            .identify(identifyRequest)
            .build();

        MParticle.start(options);
    }
}

Warning: It’s generally not a good idea to log events in Application.onCreate(). Android may instantiate your Application class for a lot of reasons, in the background, while the user isn’t even using their device.

Usage

After you install and initialize the SDK, you can log events. You can also set, remove, or get user details with User or Identity methods.

Import the mParticle module

Import the module:

import MParticle from 'react-native-mparticle'

Events

Log events:

MParticle.logEvent('Test event', MParticle.EventType.Other, { 'Test key': 'Test value' })

Log commerce events:

const product = new MParticle.Product('Test product for cart', '1234', 19.99)
const transactionAttributes = new MParticle.TransactionAttributes('Test transaction id')
const event = MParticle.CommerceEvent.createProductActionEvent(MParticle.ProductActionType.AddToCart, [product], transactionAttributes)

MParticle.logCommerceEvent(event)
const promotion = new MParticle.Promotion('Test promotion id', 'Test promotion name', 'Test creative', 'Test position')
const event = MParticle.CommerceEvent.createPromotionEvent(MParticle.PromotionActionType.View, [promotion])

MParticle.logCommerceEvent(event)
const product = new MParticle.Product('Test product that was viewed', '5678', 29.99)
const impression = new MParticle.Impression('Test impression list name', [product])
const event = MParticle.CommerceEvent.createImpressionEvent([impression])

MParticle.logCommerceEvent(event)

Log screen events:

MParticle.logScreenEvent('Test screen', { 'Test key': 'Test value' })

Exclude App and Commerce Events from mParticle Server Upload

If you have a high-volume event that you would like to forward to kits but exclude from uploading to mParticle, set a boolean flag per event.

By default, all events upload to the mParticle server unless explicitly set not to.

// Events
var event = new MParticle.Event()
    .setName('Test event')
    .setType(MParticle.EventType.Other)
    .setInfo({ 'Test key': 'Test value' })
    .setShouldUploadEvent(false) // Set false to prevent uploading, true or omit to upload
MParticle.logMPEvent(event)

// Commerce Events
const product = new MParticle.Product('Test product for cart', '1234', 19.99)
const transactionAttributes = new MParticle.TransactionAttributes('Test transaction id')
var commerceEvent = MParticle.CommerceEvent.createProductActionEvent(MParticle.ProductActionType.AddToCart, [product], transactionAttributes)
commerceEvent.setShouldUploadEvent(false) // Set false to prevent uploading, true or omit to upload
const customFlags = {
  'GA4.CommerceEventType': 'add_shipping_info',
  'GA4.ShippingTier': 'overnight'
}
commerceEvent.customFlags = customFlags
MParticle.logCommerceEvent(commerceEvent)

User

User attributes and tags are set on the current User, which you obtain from MParticle.Identity.getCurrentUser:

MParticle.Identity.getCurrentUser((currentUser) => {
    // Set a user attribute
    currentUser.setUserAttribute('Test key', 'Test value')

    // Set a reserved user attribute
    currentUser.setUserAttribute(MParticle.UserAttributeType.FirstName, 'Test first name')

    // Set an attribute list
    currentUser.setUserAttributeArray('Test key', ['Test value 1', 'Test value 2'])

    // Set a tag
    currentUser.setUserTag('Test key')

    // Remove an attribute
    currentUser.removeUserAttribute('Test key')
})

IdentityRequest

var request = new MParticle.IdentityRequest()

Set a user identity:

var request = new MParticle.IdentityRequest();
request.setUserIdentity('example@example.com', MParticle.UserIdentityType.Email);

To copy data from a previous user to a new user, build an AliasRequest and pass it to MParticle.Identity.aliasUsers after the identity change completes:

var aliasRequest = new MParticle.AliasRequest()
    .sourceMpid(previousMpid)
    .destinationMpid(newMpid);

MParticle.Identity.aliasUsers(aliasRequest, (success) => {
    console.debug(success);
});

Identity

MParticle.Identity.getCurrentUser((currentUser) => {
    console.debug(currentUser.userId);
});
var request = new MParticle.IdentityRequest();

MParticle.Identity.identify(request, (error, userId) => {
    if (error) {
        console.debug(error); //error is an MParticleError
    } else {
        console.debug(userId);
    }
});
var request = new MParticle.IdentityRequest();
request.email = 'test email';

MParticle.Identity.login(request, (error, userId) => {
    if (error) {
        console.debug(error); //error is an MParticleError
    } else {
        console.debug(userId);
    }
});
var request = new MParticle.IdentityRequest();

MParticle.Identity.logout(request, (error, userId) => {
    if (error) {
        console.debug(error);
    } else {
        console.debug(userId);
    }
});
var request = new MParticle.IdentityRequest();
request.email = 'test email 2';

MParticle.Identity.modify(request, (error, userId) => {
    if (error) {
        console.debug(error); //error is an MParticleError
    } else {
        console.debug(userId);
    }
});

Attribution

MParticle.getAttributions((attributions) => {
    console.debug(attributions);
});

In order to listen for attributions asynchronously, set the proper field in MParticleOptions as shown in the previous Android or the iOS SDK installation examples.

Kits

Check if a kit is active:

MParticle.isKitActive(kitId, (isKitActive) => {
    console.debug(isKitActive);
});

Check and set the SDK opt-out status:

MParticle.getOptOut((isOptedOut) => {
    MParticle.setOptOut(!isOptedOut);
});

Push registration

The method MParticle.logPushRegistration() accepts two parameters. For Android, provide both pushToken and senderId. For iOS, provide the push token in the first parameter, and simply pass null for the second parameter.

Android

MParticle.logPushRegistration(pushToken, senderId);

iOS

MParticle.logPushRegistration(pushToken, '');

Add GDPR consent:

var gdprConsent = new MParticle.GDPRConsent()
    .setConsented(true)
    .setDocument("the document")
    .setTimestamp(new Date().getTime())  // optional, native SDK will automatically set current timestamp if omitted
    .setLocation("the location")
    .setHardwareId("the hardwareId");

MParticle.addGDPRConsentState(gdprConsent, "the purpose");

Remove GDPR consent:

MParticle.removeGDPRConsentStateWithPurpose("the purpose");

Add CCPA consent:

var ccpaConsent = new MParticle.CCPAConsent()
    .setConsented(true)
    .setDocument("the document")
    .setTimestamp(new Date().getTime())  // optional, native SDK will automatically set current timestamp if omitted
    .setLocation("the location")
    .setHardwareId("the hardwareId");

MParticle.setCCPAConsentState(ccpaConsent);

Remove CCPA consent:

MParticle.removeCCPAConsentState();

License

Apache 2.0

Was this page helpful?

    Last Updated: October 29, 2026