Real-Time Uninstall Tracking for Android
Learn to integrate Real-Time Uninstall Tracking for Android using FCM and Netcore API.
Overview
The Real-Time Uninstall Tracking feature allows businesses to monitor app uninstall events on Android devices by integrating Firebase Analytics and Netcore's API. This feature captures the app_remove
event from Firebase processes it via cloud functions and pushes the data to Netcore for re-engagement or analysis.
Prerequisites
You can do the following to integrate Real-Time Uninstall Tracking for Android.
- Ensure the android app is integrated with Firebase Analytics.
- Ensure you have a Firebase Blaze Plan Account which is required to utilize Firebase Cloud Functions to call third-party HTTP endpoints.
- Install the latest versions for setting up Firebase Cloud Functions.
Implementation Steps
Real-Time Uninstall Tracking consists of three key steps:
- Set up a common identifier in your app
- Set the
app_remove
event as a conversion event in Firebase - Use the Firebase Cloud function to send uninstall data to Netcore
1. Set Up a Common Identifier
To ensure a common data structure between Firebase and Netcore, include the following code snippet in your Android app:
val partnerParams = Smartech.getInstance(WeakReference(application)).getPartnerParametersString()
val bundle = Bundle()
bundle.putString(SMTPartnerConstants.SMT_PARTNER_PARAMETER_KEY, partnerParams)
// Additional info from the customer
val appId = Smartech.getInstance(WeakReference(application)).getAppID()
val guid = Smartech.getInstance(WeakReference(application)).getDeviceUniqueId()
bundle.putString("ncAppId", appId)
bundle.putString("ncGuid", guid)
val ncExternalId = Smartech.getInstance(WeakReference(application)).getExternalIdentity()
bundle.putString(SMTPartnerConstants.SMT_PARTNER_EXTERNAL_IDENTITY, ncExternalId)
// Set the data to Firebase
mFirebaseAnalytics?.setDefaultEventParameters(bundle)
String partnerParams = Smartech.getInstance(new WeakReference<>(getApplicationContext())).getPartnerParametersString();
Bundle bundle = new Bundle();
bundle.putString(SMTPartnerConstants.SMT_PARTNER_PARAMETER_KEY, partnerParams);
// Additional info from the customer
String appId = Smartech.getInstance(new WeakReference<>(getApplicationContext())).getAppID();
String guid = Smartech.getInstance(new WeakReference<>(getApplicationContext())).getDeviceUniqueId();
bundle.putString("ncAppId", appId);
bundle.putString("ncGuid", guid);
String ncExternalId = Smartech.getInstance(new WeakReference<>(getApplicationContext())).getExternalIdentity();
bundle.putString(SMTPartnerConstants.SMT_PARTNER_EXTERNAL_IDENTITY, ncExternalId);
// Set the data to Firebase
FirebaseAnalytics.getInstance(this).setDefaultEventParameters(bundle);
2. Set the app_remove Event as a Conversion Event in Firebase
Firebase automatically collects the app_remove event when an app is uninstalled from an Android device. Follow these steps to enable it as a conversion event:
- Log in to your Firebase dashboard and select the integrated project.
- Navigate to Analytics > Events.
- Locate the
app_remove
event in the list. - Toggle the Mark as conversion switch to enable it as a conversion event.
Note
The
app_remove
event is only applicable to Android apps and is automatically tracked when an app package is removed or uninstalled.
3. Create and Deploy a Firebase Cloud Function
Create a Cloud Function
The Firebase Cloud Function sends app_remove
data to Netcore using HTTP requests. Refer to here for Firebase documentation.
Perform the following steps:
- Install Firebase CLI using the command:
npm install -g firebase-tools
- Log in to Firebase CLI.
- Initialize Firebase SDK for Cloud functions.
- Select JavaScript as the language.
- Open the
index.js
file in your project directory and add the following code:
const functions = require("firebase-functions/v1");
const admin = require("firebase-admin");
const request = require("request");
const logger = require("firebase-functions/logger");
admin.initializeApp();
function handleAppRemoveEvent(event, config) {
logger.log("Sending event to Netcore");
const ncPartnerParam = event.params.ncPartnerParameter;
if (!ncPartnerParam) {
logger.warn("ncPartnerParameter not found, skipping API call.");
return Promise.resolve(0);
}
const postEventData = JSON.stringify({
data: [{ eventName: "app_remove", ncPartnerParameter: ncPartnerParam }],
});
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": config.X_API_KEY,
},
body: postEventData,
url: config.WEBHOOK_URL,
maxAttempts: 5,
};
return new Promise((resolve, reject) => {
request(requestOptions, (err, response, body) => {
if (err) {
logger.error("API request error:", err);
reject(err);
} else if (response && response.statusCode === 200) {
logger.log("API response body:", body);
resolve(0);
} else {
logger.error("Unexpected API response:", response && response.statusCode);
reject(new Error("Unexpected response"));
}
});
});
}
exports.sendAndroidUninstallToNetcore = functions.analytics
.event("app_remove")
.onLog((event) => {
logger.log("Firebase app_remove event payload:", JSON.stringify(event));
const NETCORE_CONFIG = {
X_API_KEY: "YOUR_API_KEY_HERE",
WEBHOOK_URL: "YOUR_NETCORE_WEBHOOK_URL_HERE",
};
return handleAppRemoveEvent(event, NETCORE_CONFIG);
});
- Replace placeholders (
YOUR_API_KEY_HERE
andYOUR_NETCORE_WEBHOOK_URL_HERE
) with your actual Netcore API key and Webhook URL.
Deploy the Function
- Fix any ESLint issues:
./node_modules/.bin/eslint index.js --fix
- Deploy the function:
firebase deploy --only functions
- For updates, redeploy with the function name:
firebase deploy --only "functions:sendAndroidUninstallToNetcore"
Once deployed successfully, uninstall events are sent to Netcore in real-time. These events can be utilized to:
- `Re-engage users via personalized messages or campaigns.
- Analyze uninstall trends to improve retention strategies.
Updated 13 days ago