Track Uninstall For Android
The AppTrove React Native SDK enables tracking of app uninstalls on Android using Firebase Analytics, providing insights into user retention and campaign effectiveness. This feature allows you to monitor the complete user lifecycle by sending uninstall data to the Trackier Mobile Marketing Platform (MMP). This section outlines the steps to set up uninstall tracking for your Android app.
Prerequisites
- AppTrove React Native SDK installed and initialized in your project
- A Trackier MMP account with access to the Trackier Panel
- React Native 0.60 or later
- Android API 21 (Android 5.0) or later
- A Firebase project set up in the Firebase Console
- Basic knowledge of JavaScript, React Native, and Firebase configuration
Set Up Uninstall Tracking
To track uninstalls, integrate Firebase Analytics into your React Native project, configure a user property with the Trackier ID, and set up a Firebase Cloud Function to send uninstall data to Trackier MMP.
Step 1: Add Firebase Analytics to Your App
- Install the Firebase Analytics plugin by running the following command in your project root directory:
npm install @react-native-firebase/analytics
- Follow the Firebase Analytics setup instructions to add Firebase to your app, including adding the
google-services.json
file to your Android project. - Add your app to your Firebase project in the Firebase Console.
Step 2: Configure Firebase Analytics
- Import the Firebase Analytics module in your JavaScript code:
import analytics from '@react-native-firebase/analytics';
- Create a Firebase Analytics instance and set the
ct_objectId
user property with the Trackier ID. Add the following code after SDK initialization:
JavaScript Example
import React from 'react';
import { TrackierConfig, TrackierSDK } from 'react-native-trackier';
import analytics from '@react-native-firebase/analytics';
import { StyleSheet, Text, View } from 'react-native';
export default function App() {
// Initialize AppTrove SDK
const trackierConfig = new TrackierConfig("xxxx-xx-4505-bc8b-xx", TrackierConfig.EnvironmentDevelopment);
TrackierSDK.initialize(trackierConfig);
// Set up Firebase Analytics for uninstall tracking
const setupUninstallTracking = async () => {
const trackierId = await TrackierSDK.getTrackierId();
await analytics().setUserProperty('ct_objectId', trackierId);
};
return (
<View style={styles.container}>
<Text>AppTrove React Native SDK with Uninstall Tracking</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
Step 3: Configure Firebase for Uninstall Tracking
Prerequisites
- Node.js 20.x or 22.x (use nvm for easy version management)
- Firebase CLI (
npm install -g firebase-tools
) - Firebase project on Blaze plan (required for analytics triggers)
- Google account with access to Firebase Console
- App with Firebase Analytics SDK integrated
- Trackier account (for uninstall event tracking)
Set Up Node.js and Firebase CLI
# Install Node Version Manager (nvm) if not already installed
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Install and use Node.js 22 (recommended)
nvm install 22
nvm use 22
# Install Firebase CLI globally
npm install -g firebase-tools
# Login to Firebase
firebase login
Create or Select Your Firebase Project
If you already have a Firebase project for your app:
- Go to Firebase Console
- Select your project
If you need to create a new Firebase project:
- In the Firebase Console, click Add project and follow the steps
- Link Google Analytics when prompted
- Register your Android app and download
google-services.json
for your app
Initialize Firebase Functions in Your Project Directory
# Create a new directory for your project (if needed)
mkdir YourProjectName
cd YourProjectName
# Initialize Firebase in this directory
firebase init functions
- Choose:
- Use an existing project (if you already have one) or create a new one
- Language: JavaScript
- ESLint: Yes (recommended)
- Install dependencies: Yes
Prepare Your Functions Directory
- Your folder structure should look like this:
YourProjectName/
functions/
index.js
package.json
.eslintrc.js
... - If you already have a
functions
directory, use it.
Add the Uninstall Tracking Function Code
Replace the contents of functions/index.js
with:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const axios = require("axios");
// Set your SDK key here (or use environment variables for security)
const SDK_KEY = "YOUR_SDK_KEY_HERE";
admin.initializeApp();
// Defensive: Only export analytics trigger if available
if (!functions.analytics) {
// This will prevent deployment errors in unsupported environments
console.warn("Analytics triggers are not available in this environment.");
exports.sendAndroidUninstallToTrackierApptrove = () => {};
} else {
exports.sendAndroidUninstallToTrackierApptrove = functions.analytics
.event("app_remove")
.onLog(async (event) => {
// Defensive extraction of user properties
const userProps =
event.user && event.user.userProperties ?
event.user.userProperties :
{};
const installId =
userProps.ct_objectId && userProps.ct_objectId.value ?
userProps.ct_objectId.value :
"";
const mode =
userProps.ct_mode && userProps.ct_mode.value ?
userProps.ct_mode.value :
"production";
const cuid =
userProps.ct_uid && userProps.ct_uid.value ?
userProps.ct_uid.value :
"";
const cmail =
userProps.ct_mail && userProps.ct_mail.value ?
userProps.ct_mail.value :
"";
if (!installId) {
functions.logger.warn(
"No ct_objectId found in event",
{userProps},
);
return null;
}
const url = "https://events.trackier.io/v1/uninstall";
const data = {
installId,
sdkKey: SDK_KEY,
mode,
cuid,
cmail,
meta: event,
};
try {
const response = await axios.post(
url,
data,
{
headers: {"Content-Type": "application/json"},
timeout: 10000,
},
);
functions.logger.log(
"Tracked uninstall",
{
installId,
status: response.status,
data: response.data,
},
);
} catch (error) {
functions.logger.error(
"Uninstall tracking failed",
{
installId,
status: error.response ? error.response.status : "N/A",
data: error.response ? error.response.data : error.message,
},
);
}
return null;
});
}
Set Up Dependencies In package.json
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint:fix": "eslint . --fix",
"lint": "eslint .",
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "20"
},
"main": "index.js",
"dependencies": {
"axios": "^1.10.0",
"firebase-admin": "^11.0.0",
"firebase-functions": "^3.23.0"
},
"devDependencies": {
"eslint": "^8.15.0",
"eslint-config-google": "^0.14.0"
},
"private": true
}
ESLint Configuration
Create a .eslintrc.js
file in your functions directory:
// .eslintrc.js
module.exports = {
parserOptions: {
ecmaVersion: 2020, // or at least 2015
sourceType: 'module', // if you're using ES modules (import/export)
},
env: {
es6: true,
node: true, // if you're in a Node.js environment
},
};
Deploy Your Function And Fix link Error
# In the functions directory
cd functions
# Install dependencies
npm install
# (Optional) Run linter and auto-fix issues
npm run lint:fix
firebase deploy --only functions
- If you see errors about CPU/Gen 2 or function already existing as 2nd Gen:
firebase functions:delete sendAndroidUninstallToTrackierApptrove --force
// After delete your function redeploy the function
firebase deploy --only functions - Ignore warnings about outdated
firebase-functions
if you need analytics triggers.
Verify and Debug
A. See Data in Firebase Console
- Go to Firebase Console
- Select your project
- Navigate to Analytics > Dashboard and look for the
app_remove
event
B. Use Analytics DebugView
- In the Firebase Console, go to Analytics > DebugView
- Enable DebugView on your device:
adb shell setprop debug.firebase.analytics.app <your.app.package>
# Example:
adb shell setprop debug.firebase.analytics.app com.example.myapp
# To turn off:
adb shell setprop debug.firebase.analytics.app .none. - Open your app and trigger uninstall or other events
- Watch for real-time events in DebugView
C. Check Cloud Function Logs
- In Firebase Console: Build > Functions > View logs
- monitor the status of your cloud function here:
https://console.cloud.google.com/functions/list
- Look for logs like
Tracked uninstall
orUninstall tracking failed
D. Check Trackier Uninstall Log
- Log in to your [Trackier dashboard]
- Navigate to uninstall/event logs
- Filter by
installId
or other user properties - Confirm the uninstall event was received
Tips for Cloud Function
- Analytics triggers not working?
- Make sure you are on Blaze plan and Analytics is linked
- Only deploy to production (not emulator)
- Use
firebase-functions@3.x
andfirebase-admin@11.x
- CPU/Gen 2 errors?
- Remove any
"cpu"
option fromfirebase.json
or CLI flags - Delete the function if it was previously deployed as Gen 2, then redeploy
- Remove any
- Dependency conflicts?
- Downgrade
firebase-admin
to^11.0.0
if needed
- Downgrade
- Linting errors?
- Use
npm run lint:fix
and break up long lines/fix indentation
- Use
- Function not triggering?
- Ensure your app is setting the user property:
await analytics().setUserProperty('ct_objectId', trackierId);
- Use Analytics DebugView to verify the event is sent
- Ensure your app is setting the user property:
- Still stuck?
Best Practices
- Test Firebase Integration: Verify Firebase Analytics is correctly set up by logging custom events and checking the Firebase Console.
- Secure Firebase Configuration: Store
google-services.json
securely and avoid committing it to public repositories. - Call Setup Early: Execute the uninstall tracking setup code as early as possible in the app lifecycle to ensure the Trackier ID is set.
- Monitor Uninstall Data: Regularly check the Trackier Panel to analyze uninstall trends and optimize retention strategies.
- Comply with Privacy Regulations: Ensure uninstall tracking complies with GDPR, CCPA, and other privacy laws, obtaining user consent where required.
- Use Development Environment: Test uninstall tracking in
TrackierConfig.EnvironmentDevelopment
to avoid affecting production data.
Troubleshooting
- Trackier ID Not Set:
- Verify that
TrackierSDK.getTrackierId()
is called afterTrackierSDK.initialize
. - Check console logs for errors related to
getTrackierId
.
- Verify that
- Firebase Analytics Not Tracking:
- Ensure the
@react-native-firebase/analytics
package is installed and configured correctly. - Confirm the
google-services.json
file is added to theandroid/app
directory. - Check the Firebase Console for event logs to verify
app_remove
events.
- Ensure the
- Uninstall Data Not Appearing in Trackier Panel:
- Verify the
app_remove
event is set as a conversion event in Firebase. - Ensure the Firebase Cloud Function is correctly implemented and deployed.
- Verify the
For further assistance, refer to the Trackier Documentation Portal or contact Trackier support at support@trackier.com.