Deep Linking
Use the tabs below for SDK-specific deep-link implementation.
SDK-Specific Quick Deep Link Setup
- ✓ Apptrove SDK (Recommended)
- Trackier SDK (Deprecating August 2026)
Starting from v2.0.1, the Apptrove SDK callback returns a structured AppTroveDeepLink object instead of a plain URL string.
import { AppTroveConfig, AppTroveSDK, AppTroveDeepLink } from 'apptrove-expo-sdk';
const config = new AppTroveConfig('YOUR_SDK_KEY', AppTroveConfig.EnvironmentDevelopment);
config.setDeferredDeeplinkCallbackListener((deepLink: AppTroveDeepLink) => {
console.log('Deferred deep link received');
console.log('URL:', deepLink.url);
console.log('Is Deferred:', deepLink.isDeferred);
console.log('Value:', deepLink.deepLinkValue);
console.log('Partner:', deepLink.partnerId);
console.log('Site ID:', deepLink.siteId);
console.log('Campaign:', deepLink.campaign);
console.log('Campaign ID:', deepLink.campaignId);
console.log('Ad:', deepLink.ad);
console.log('Ad ID:', deepLink.adId);
console.log('Channel:', deepLink.channel);
console.log('Click ID:', deepLink.clickId);
console.log('P1-P5:', deepLink.p1, deepLink.p2, deepLink.p3, deepLink.p4, deepLink.p5);
if (deepLink.sdkParams) {
console.log('SDK Params:', JSON.stringify(deepLink.sdkParams));
}
});
AppTroveSDK.initialize(config);
Starting from v1.6.79, the Trackier SDK callback returns a structured TrackierDeepLink object instead of a plain URL string.
import { TrackierConfig, TrackierSDK, TrackierDeepLink } from 'trackier-expo-sdk';
// 1. Initialize Config
const config = new TrackierConfig('YOUR_SDK_KEY', TrackierConfig.EnvironmentDevelopment);
// 2. Set up listener BEFORE initialization
config.setDeferredDeeplinkCallbackListener((deepLink: TrackierDeepLink) => {
console.log('Deferred deep link received');
console.log('URL:', deepLink.url);
console.log('Is Deferred:', deepLink.isDeferred);
console.log('Value:', deepLink.deepLinkValue);
console.log('Partner:', deepLink.partnerId);
console.log('Site ID:', deepLink.siteId);
console.log('Campaign:', deepLink.campaign);
console.log('Campaign ID:', deepLink.campaignId);
console.log('Ad:', deepLink.ad);
console.log('Ad ID:', deepLink.adId);
console.log('Channel:', deepLink.channel);
console.log('Click ID:', deepLink.clickId);
console.log('P1-P5:', deepLink.p1, deepLink.p2, deepLink.p3, deepLink.p4, deepLink.p5);
});
// 3. Initialize SDK
TrackierSDK.initialize(config);
// 4. Parse immediate deep links AFTER initialization
// (See detailed implementation below)
Deep linking is a technique that allows users to navigate directly to specific content within your app by clicking on a link. The Apptrove Expo SDK supports deferred deep linking, which handles cases where users need to install your app first.
Understanding Deferred Deep Linking
Deferred deep linking occurs when a user does not have your app installed on their device. When this is the case, the deep link will first send the user to the device app store to install the app. Once the user has installed and opened the app, the SDK will redirect them to the screen specified in the link.
Deep Linking Scenario

Overview
Deferred deep linking ensures users reach intended content seamlessly:
- Immediate Deep Link: When the app is already installed, the app captures the URL and navigates to the specified screen.
- Deferred Deep Link: When the app is not installed, Trackier redirects to the app store. After installation, the SDK navigates to the specified screen.
- Use Case: Show "Product: jeans, Quantity: 3" after clicking a link like
https://trackier.u9ilnk.me/d/PGJ2m4NtPd?dlv=standard&productid=jeans&quantity=3.
Example URLs:
- Short:
https://trackier.u9ilnk.me/d/PGJ2m4NtPd - Long:
https://trackier.u9ilnk.me/d/PGJ2m4NtPd?pid=QR_Code&cost_value=100343&cost_currency=USD&lbw=1h&camp=VistMarketCampaign&dlv=standard&p1=reewrwrwerwe&p2=New+Product&productid=jeans&quantity=3&id=3234234
Prerequisites
- Apptrove Expo SDK:
trackier-expo-sdkinstalled in your project - Expo: Expo SDK 48+ or later
- Apptrove Panel: Configured through Panel with deep link settings
- App Store/Play Store: App available for testing
- Dependencies: Internet permission
Configuration via Expo Config (app.json)
To handle deep links without manually editing AndroidManifest.xml or Info.plist, configure your deep link settings directly in your app.json or app.config.js.
Step 1: Configure URL Scheme
Define a custom URL scheme for your app. This allows your app to be opened via URIs like my-scheme://.
{
"expo": {
"scheme": "my-scheme",
// ...
}
}
Step 2: Configure Android App Links
To support Android App Links (e.g., https://yourbrand.u9ilnk.me/...), add intentFilters to the android section of your app.json.
{
"expo": {
"android": {
"intentFilters": [
{
"action": "VIEW",
"autoVerify": true,
"data": [
{
"scheme": "https",
"host": "yourbrand.u9ilnk.me",
"pathPrefix": "/product"
}
],
"category": ["BROWSABLE", "DEFAULT"]
}
]
}
}
}
Step 3: Configure iOS Universal Links
To support iOS Universal Links, add your associated domain to the ios section of your app.json.
{
"expo": {
"ios": {
"associatedDomains": [
"applinks:yourbrand.u9ilnk.me"
]
}
}
}
Step 4: Apply Configuration
After updating app.json, you must regenerate your native project files (if using Bare workflow or CNG) to apply the changes.
npx expo prebuild
Deep Link Handling
The SDK handles deep links in two scenarios:
- Immediate Deep Link: When the app is already installed and opened via deep link
- Deferred Deep Link: When the app is installed via deep link and opened for the first time
Step 1: Handle Immediate Deep Links
When the app opens via deep link, pass the URL to the Trackier SDK for tracking:
- ✓ Apptrove SDK (Recommended)
- Trackier SDK (Deprecating August 2026)
import { useEffect } from 'react';
import { Linking } from 'react-native';
import { AppTroveConfig, AppTroveSDK, AppTroveDeepLink } from 'apptrove-expo-sdk';
export default function App() {
useEffect(() => {
// Handle immediate deep links when app opens
const getUrlAsync = async () => {
const initialUrl = await Linking.getInitialURL();
if (initialUrl) {
// Pass the deep link to AppTrove SDK for tracking
AppTroveSDK.parseDeepLink(initialUrl);
}
};
getUrlAsync();
}, []);
return (
// Your app content
);
}
import { useEffect } from 'react';
import { Linking } from 'react-native';
import { TrackierConfig, TrackierSDK } from 'trackier-expo-sdk';
export default function App() {
useEffect(() => {
// Handle immediate deep links when app opens
const getUrlAsync = async () => {
const initialUrl = await Linking.getInitialURL();
if (initialUrl) {
// Pass the deep link to Trackier SDK for tracking
TrackierSDK.parseDeepLink(initialUrl);
}
};
getUrlAsync();
}, []);
return (
// Your app content
);
}
Step 2: Configure Deferred Deep Link Callback
Set up the deferred deep link callback during SDK initialization to handle cases where users install the app via deep link: