Installation
Step 1: Add Prerequisites to config.xml
Before adding platforms or installing the plugin, add the following preferences to your app’sconfig.xml:
These preferences must be set before running
cordova platform add ios or cordova platform add android. If you’ve already added platforms, remove and re-add them after updating config.xml:Step 2: Install the Plugin
- Downloads the package from npm
- Copies native Swift/Kotlin bridge code into your project
- Adds iOS pod dependency (LinkrunnerKit)
- Adds Android gradle dependency (Linkrunner android-sdk)
- Injects iOS Info.plist entries (SKAN endpoints, tracking description)
- Registers the JS module globally as
window.linkrunner
What the plugin auto-configures
Thecordova plugin add command automatically configures the following native settings via plugin.xml. No manual editing of Info.plist or build.gradle is required.
iOS (auto-injected into Info.plist):
- LinkrunnerKit pod dependency (iOS 15+)
- Linkrunner SDK gradle dependency
- Kotlin stdlib and coroutines dependencies
android.permission.INTERNETandandroid.permission.ACCESS_NETWORK_STATEpermissions- Backup rules exclusion for SharedPreferences
Initialization
To initialize the Linkrunner SDK, add this code inside thedeviceready event. No import or require is needed — linkrunner is globally available after plugin installation.
You can find your project token here.
SDK Signing Parameters (Optional)
For enhanced security, the Linkrunner SDK accepts the following signing parameters during initialization:secretKey: A unique secret key used for request signing and authenticationkeyId: A unique identifier for the key pair used in the signing process
getAttributionData method.
User Registration
Call thesignup method once after the user has completed your app’s onboarding process:
It is strongly recommended to use the integrated platform’s identify function to set a persistent user_id once it becomes available (typically after signup or login).
- Mixpanel - ID Management & User Identification
- PostHog - How User Identification Works
- Amplitude - Identify Users Documentation
- mixpanel_distinct_id for Mixpanel
- posthog_distinct_id for PostHog
- amplitude_device_id for Amplitude
Getting Attribution Data
To get attribution data and deeplink information for the current installation, use thegetAttributionData function:
getAttributionData function returns:
Setting User Data
CallsetUserData each time the app opens and the user is logged in:
Setting CleverTap ID
Use thesetAdditionalData method to set CleverTap ID:
Parameters for linkrunner.setAdditionalData
clevertapId: string (optional) - CleverTap user identifier
Revenue Tracking
Revenue data is only stored and displayed for attributed users. Make sure you have implemented the
.signup function before capturing payments. To attribute a test user, follow the Integration Testing guide. You can verify your events are being captured on the Events Settings page.Capture Payment
Use this method to capture payment information:Parameters for linkrunner.capturePayment
amount: number (required) - The payment amountuserId: string (required) - Identifier for the user making the paymentpaymentId: string (optional) - Unique identifier for the paymenttype: string (optional) - Type of payment. Available options:FIRST_PAYMENT- First payment made by the userSECOND_PAYMENT- Second payment made by the userWALLET_TOPUP- Adding funds to a walletFUNDS_WITHDRAWAL- Withdrawing fundsSUBSCRIPTION_CREATED- New subscription createdSUBSCRIPTION_RENEWED- Subscription renewalONE_TIME- One-time paymentRECURRING- Recurring paymentDEFAULT- Default type (used if not specified)
status: string (optional) - Status of the payment. Available options:PAYMENT_INITIATED- Payment has been initiatedPAYMENT_COMPLETED- Payment completed successfully (default if not specified)PAYMENT_FAILED- Payment attempt failedPAYMENT_CANCELLED- Payment was cancelled
eventData: object (optional) - Key-value pairs for additional event data, including Meta ecommerce properties.
Removing Payments
Remove payment records (for refunds or cancellations):Parameters for linkrunner.removePayment
userId: string (optional) - Identifier for the user whose payment is being removed. If onlyuserIdis provided, all payments for that user will be removed.paymentId: string (optional) - Unique identifier for the payment to be removed
paymentId or userId must be provided when calling removePayment.
Ecommerce Events
If you are tracking Ecommerce events to sync with Meta Catalog Sales, you must format youreventData to include Meta’s required fields. You also need to map your custom event to the standard commerce event in the Linkrunner Dashboard.
For detailed explanations of the required fields like content_ids, contents, and value, refer to our Meta Commerce Manager documentation.
Add To Cart Example
Use thetrackEvent method to send an AddToCart event:
View Content Example
Use thetrackEvent method to send a ViewContent event:
Payment / Purchase Example
Use thecapturePayment method to send a Purchase event containing the ecommerce payload:
Note: For more information on testing and verifying your ecommerce events, please see our Testing Ecommerce Events guide.
Tracking Custom Events
Events are only stored and displayed for attributed users. Make sure you have implemented the
.signup function before tracking events. To attribute a test user, follow the Integration Testing guide. You can verify your events are being captured on the Events Settings page. For capturing revenue, it is recommended to use the .capturePayment method instead of .trackEvent.Revenue Sharing with Ad Networks
To enable revenue sharing with ad networks like Google Ads and Meta, include anamount parameter as a number in your custom event data. This allows the ad networks to optimize campaigns based on the revenue value of conversions:
For revenue sharing with ad networks to work properly, ensure the
amount parameter is passed as a number, not as a
string.Enhanced Privacy Controls
The SDK offers options to enhance user privacy:Uninstall Tracking
Before you begin
Here’s what you need to know before getting started: Requirements:- A Cordova push notification plugin (e.g.,
cordova-plugin-push) - Firebase in your Cordova project (Android)
- Registering your app with APNs (iOS)
Android
Connect Firebase Cloud Messaging (FCM) with LinkrunnerFCM HTTP v1 API
FCM HTTP v1 API
To configure FCM HTTP V1 for uninstalls:Enable the FCM API:
- Go to the FCM console.
- Select a project.
- Go to Project Overview > Project settings.
- Copy the Project ID. This will be required in a later step.

- Go to the Cloud Messaging tab.
- Make sure that Firebase Cloud Messaging API (V1) is set to Enabled.
- Go to the Service accounts tab.
- Click Manage service account permissions.
- A new browser tab opens in Google Cloud Platform.
- In the side menu, select Roles.
- Click + Create role.
- Enter the following details:
- Title: Linkrunner Uninstalls
- ID: lr_uninstalls
- Role launch stage: General availability
- Click + Add permissions.
- In Enter property name or value field, enter
cloudmessaging.messages.createand select it from the search results.
- Check the cloudmessaging.messages.create option and click Add.
- Click Create.
- In the side menu, select IAM.
- Open the View by Principals tab.
- Click Grant Access.
- In Add Principals -> New principals field, enter
lr-uninstalls-tracking@lr-uninstalls-tracking.iam.gserviceaccount.com - In Assign Roles -> Select a role field, enter
Linkrunner Uninstallsand select it from the search results. - Click Save.
Linkrunner Dashboard
Linkrunner Dashboard
- In Linkrunner, go to Settings > Uninstall Tracking.
-
Under the Android tab, enter the Firebase Project ID that you copied initially and click Save.

Integrate with Linkrunner SDK
Integrate with Linkrunner SDK
Follow these instructions to integrate FCM with the Linkrunner SDK:Custom implementations of push notification handlers can unintentionally make uninstall push notifications visible to users, disrupting the intended silent experience. To avoid this, ensure your logic checks if the notification contains
- Set up Push Notifications:
cordova-plugin-push:- Configure your app to provide the device’s push token to the Linkrunner SDK.
lr-uninstall-tracking and handles it accordingly, as shown in the code example above.iOS
Connect APNs with LinkrunnerApple Developer Portal
Apple Developer Portal
Get the required credentials from the Apple Developer Portal:APNs Authentication Key (p8) and Key ID:
- Go to the Apple Developer Portal.
- Select Identifiers under Certificates, IDs & Profiles.
- Click on the app you want to track uninstalls for. Then, under Capabilities, search for Push Notifications and enable it.
- Under Certificates, IDs & Profiles, select Keys and click on plus (+) icon to create a key. Enable APNs when creating the key and download the key file (p8).
- The Key ID can be found in the Keys tab.
- Under Identifiers, click on your app and you will see the Bundle ID and Team ID (App ID Prefix).
Linkrunner Dashboard
Linkrunner Dashboard
- In Linkrunner, go to Settings > Uninstall Tracking.
-
Under the iOS tab, upload the APNs Authentication Key (p8) file and enter the Key ID, Bundle ID and Team ID (App ID Prefix) that you copied from the Apple Developer Portal.

Integrate with Linkrunner SDK
Integrate with Linkrunner SDK
Follow these instructions to integrate APNs with the Linkrunner SDK:
- Set up Push Notifications:
cordova-plugin-push).- Configure your app to provide the device’s APNs token to the Linkrunner SDK.
Handle Deeplink
To enable remarketing and reattribution, you need to capture deep links and pass them to the Linkrunner SDK. This allows Linkrunner to detect returning users who open the app via a deep link.Cold Start
Cold start deeplinks are automatically captured by the native SDK duringinit(). The deeplink URL is available via getAttributionData().
Warm Start
For warm start deeplinks (app is already running), use Cordova’shandleOpenURL:
Function Placement Guide
| Function | Where to Place | When to Call |
|---|---|---|
linkrunner.init | deviceready event handler | Once when app starts |
linkrunner.getAttributionData | Attribution data handling flow | Whenever the attribution data is needed |
linkrunner.setAdditionalData | Integration code | When third-party integration IDs are available |
linkrunner.signup | Onboarding flow | Once after user completes onboarding |
linkrunner.setUserData | Authentication logic | Every time app opens with logged-in user |
linkrunner.trackEvent | Throughout app | When specific user actions occur |
linkrunner.capturePayment | Payment processing | When user makes a payment |
linkrunner.removePayment | Refund flow | When payment needs to be removed |
linkrunner.setPushToken | Push notification setup | When push token is available |
linkrunner.handleDeeplink | handleOpenURL handler | When app is opened via a deep link |
Next Steps
Test Your Integration
Validate your setup end-to-end
Set Up Deep Linking
Configure deep links for your app







