Adjust React Native SDK
The `react-native-adjust` package provides the official React Native SDK for Adjust, a mobile app attribution and analytics platform. It enables developers to track installs, events, sessions, and deep links across iOS and Android applications, providing insights into user acquisition campaigns and in-app behavior. The current stable version is `5.5.0`, with frequent updates that typically mirror the underlying native Adjust iOS and Android SDKs. This ensures compatibility with the latest Adjust backend features and OS-level changes. Key differentiators include robust fraud prevention, granular attribution reporting, and seamless integration with the Adjust dashboard for comprehensive analytics, making it a critical tool for mobile marketers and app developers focused on growth and measurement.
Common errors
-
Adjust.modulemap not found
cause Specific CocoaPods integration issues, often related to caching or incorrect project setup.fixThis issue was fixed in `v5.0.2`. Ensure you are on `v5.0.2` or higher. If it persists, try cleaning CocoaPods cache (`pod cache clean --all`), deleting `Podfile.lock` and `Pods` directory, then reinstalling pods (`pod install`). -
TypeError: Cannot read property 'PROPERTY_NAME' of null/undefined in Adjust SDK callbacks or data objects.
cause Occasional `NPE occurrences` (Null Pointer Exceptions) in native code were reported, especially when the app was entering the background, or `type mismatch` in `AdjustPlayStoreSubscription` fields.fixEnsure you are on `v5.1.0` or higher to fix background NPEs and `v5.0.4` or higher for `AdjustPlayStoreSubscription` type mismatches. Always add null/undefined checks for properties retrieved from Adjust callback objects, as some fields might legitimately be absent. -
Application Not Responding (ANR) on Android during SDK initialization.
cause Occasional ANRs while reading install referrer from Shared Preferences during SDK initialization on Android.fixThis issue was fixed in `v5.0.2`. Upgrade to `react-native-adjust` `v5.0.2` or newer to resolve this problem.
Warnings
- gotcha Always use `AdjustConfig.EnvironmentProduction` for live applications and `AdjustConfig.EnvironmentSandbox` for development/testing. Mixing these can lead to inaccurate data.
- breaking When upgrading Adjust native SDKs, especially across major versions, verify that the `react-native-adjust` package is also compatible. While `react-native-adjust` abstracts native changes, significant native API shifts might require an update to the React Native wrapper.
- gotcha The `index.d.ts` file now explicitly indicates nullable types (e.g., in `AdjustAttribution`). TypeScript users might encounter stricter type checking for optional fields, requiring explicit null checks.
- gotcha New methods like `getAdidWithTimeout`, `getAttributionWithTimeout`, `resolveLinkWithUrl`, `setStoreInfo` and support for Google LVL/ODM have been added in recent versions. Developers intending to use these features must upgrade their SDK.
Install
-
npm install react-native-adjust -
yarn add react-native-adjust -
pnpm add react-native-adjust
Imports
- Adjust
import { Adjust } from 'react-native-adjust';import Adjust from 'react-native-adjust';
- AdjustConfig
import AdjustConfig from 'react-native-adjust';
import { AdjustConfig } from 'react-native-adjust'; - AdjustEvent
const AdjustEvent = require('react-native-adjust').AdjustEvent;import { AdjustEvent } from 'react-native-adjust'; - AdjustAttribution
import { AdjustAttribution } from 'react-native-adjust';
Quickstart
import Adjust, { AdjustConfig, AdjustEvent, AdjustLogLevel } from 'react-native-adjust';
const APP_TOKEN = process.env.ADJUST_APP_TOKEN ?? 'YOUR_ADJUST_APP_TOKEN';
const ENVIRONMENT = AdjustConfig.EnvironmentSandbox; // Use EnvironmentProduction for production
const config = new AdjustConfig(APP_TOKEN, ENVIRONMENT);
// Set up a log listener for debugging
config.setLogLevel(AdjustLogLevel.Verbose);
config.setLogDelegate((logLevel, message) => {
console.log(`[Adjust Log] ${AdjustLogLevel[logLevel]}: ${message}`);
});
// Set an attribution listener
config.setAttributionCallbackListener((attribution) => {
console.log('Attribution changed:', attribution);
});
// Initialize the SDK
Adjust.create(config);
// Track an event after SDK initialization
const trackPurchaseEvent = (amount: number, currency: string) => {
const event = new AdjustEvent('YOUR_EVENT_TOKEN'); // Replace with your event token
event.setRevenue(amount, currency);
event.setTransactionId('ORDER_XYZ_123'); // Optional: Add transaction ID
Adjust.trackEvent(event);
console.log(`Tracked purchase event: ${amount} ${currency}`);
};
// Example usage:
trackPurchaseEvent(19.99, 'USD');
Adjust.getAdidWithTimeout(5000) // Get ADID with a 5-second timeout
.then((adid) => {
console.log('Adjust ADID (with timeout):', adid);
})
.catch((error) => {
console.error('Failed to get ADID with timeout:', error);
});