Tracking de desinstalación
Rastrea las desinstalaciones de aplicaciones para medir la retención de usuarios y optimizar las campañas de reengagement integrando Firebase Cloud Messaging (FCM) con el SDK de Singular.
Importante: Google declaró obsoletas las API de GCM en abril de 2018. Usa Firebase Cloud Messaging (FCM) para todas las implementaciones de tracking de desinstalación.
Requisitos previos
Configurar la plataforma de Singular
Antes de implementar el tracking de desinstalación en tu aplicación, configura tu app en la plataforma de Singular y completa los pasos de integración del SDK de Android + FCM descritos en Configuración del tracking de desinstalación en Android .
Requisitos del sistema
El tracking de desinstalación requiere Firebase Cloud Messaging y configuraciones específicas del dispositivo.
Requisitos de FCM ( fuente ):
- Versión de Android: Los dispositivos deben ejecutar Android 4.1 (API 16) o superior
- Servicios de Google Play: Los dispositivos deben tener la aplicación Google Play Store instalada
- Compatibilidad con emuladores: Se admiten emuladores con Android 4.1+ que incluyan las API de Google
- Distribución: Las aplicaciones pueden distribuirse fuera de Google Play Store y aun así admitir el tracking de desinstalación
Nota: Los usuarios con versiones de Android no compatibles o dispositivos sin los Servicios de Google Play no serán rastreados para desinstalaciones.
Pasos de implementación
Paso 1: Integrar Firebase Cloud Messaging
Configura Firebase Cloud Messaging en tu aplicación si aún no está configurado.
Sigue la guía oficial de Google para Configurar una aplicación cliente de Firebase Cloud Messaging en Android . Esto incluye:
- Agregar Firebase a tu proyecto de Android
-
Agregar la dependencia del SDK de FCM a tu
app/build.gradle - Crear una clase Firebase Messaging Service
- Solicitar permisos de notificación (Android 13+)
Paso 2: Confirmar la configuración de FCM en AndroidManifest.xml
Verificar el servicio y los permisos de FCM
Asegúrate de que tu aplicación ya esté integrada con Firebase Cloud Messaging y que el manifiesto de Android declare un FirebaseMessagingService para recibir los mensajes de FCM.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.your.package">
<!-- FCM Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application>
<!-- App Firebase Messaging Service -->
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
Importante: Reemplaza
.MyFirebaseMessagingService
por el nombre completamente calificado de tu clase que extiende
FirebaseMessagingService
. Solo un servicio debe manejar el intent
com.google.firebase.MESSAGING_EVENT
en tu aplicación.
Paso 3: Registrar el token de dispositivo de FCM
Obtén el token de dispositivo de FCM y envíalo a Singular para el tracking de desinstalación.
Obtener y establecer el token
Obtén el token de FCM y regístralo en Singular inmediatamente después de inicializar el SDK.
import com.google.firebase.messaging.FirebaseMessaging
import com.singular.sdk.Singular
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Singular SDK
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
Singular.init(applicationContext, config)
// Retrieve and register FCM token
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Fetching FCM token failed", task.exception)
return@addOnCompleteListener
}
// Get FCM token
val token = task.result
// Register token with Singular
Singular.setFCMDeviceToken(token)
Log.d("FCM", "FCM token registered with Singular: $token")
}
}
}
import com.google.firebase.messaging.FirebaseMessaging;
import com.singular.sdk.Singular;
import com.singular.sdk.SingularConfig;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize Singular SDK
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET");
Singular.init(getApplicationContext(), config);
// Retrieve and register FCM token
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w("FCM", "Fetching FCM token failed", task.getException());
return;
}
// Get FCM token
String token = task.getResult();
// Register token with Singular
Singular.setFCMDeviceToken(token);
Log.d("FCM", "FCM token registered with Singular: " + token);
}
});
}
}
Mejor práctica:
Registra el token de FCM inmediatamente
después de
Singular.init()
para garantizar que el tracking de desinstalación esté habilitado desde
la primera sesión de la aplicación.
Singular.setFCMDeviceToken()
no realiza ninguna acción de forma silenciosa si se llama antes de que
Singular.init()
se complete, o si el argumento del token es
null
o está vacío. Si el registro del token parece no hacer nada, confirma
que el SDK se inicializó primero y que el token de FCM devuelto por
Firebase es una cadena no vacía.
Manejar la actualización del token
Actualiza el token de FCM en Singular cada vez que se renueve para mantener un tracking de desinstalación preciso.
import com.google.firebase.messaging.FirebaseMessagingService
import com.singular.sdk.Singular
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
// Send updated token to Singular
Singular.setFCMDeviceToken(token)
Log.d("FCM", "New FCM token registered: $token")
// Also send token to your server if needed
sendTokenToServer(token)
}
private fun sendTokenToServer(token: String) {
// Implement your server communication logic here
}
}
import com.google.firebase.messaging.FirebaseMessagingService;
import com.singular.sdk.Singular;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
// Send updated token to Singular
Singular.setFCMDeviceToken(token);
Log.d("FCM", "New FCM token registered: " + token);
// Also send token to your server if needed
sendTokenToServer(token);
}
private void sendTokenToServer(String token) {
// Implement your server communication logic here
}
}
Importante:
Los tokens de FCM pueden actualizarse en cualquier
momento (actualizaciones de la app, restauración del dispositivo, etc.).
Implementa siempre
onNewToken()
para mantener a Singular actualizado.
Método de configuración alternativo
Establecer el token durante la inicialización
Si tienes el token de FCM disponible antes de la inicialización del SDK,
configúralo en el objeto
SingularConfig
.
// Get token synchronously (if cached)
val cachedToken = getStoredFCMToken() // Your caching logic
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
.withFCMDeviceToken(cachedToken)
Singular.init(applicationContext, config)
// Get token synchronously (if cached)
String cachedToken = getStoredFCMToken(); // Your caching logic
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET")
.withFCMDeviceToken(cachedToken);
Singular.init(getApplicationContext(), config);
Firma del método:
public SingularConfig withFCMDeviceToken(String fcmDeviceToken);
withFCMDeviceToken
solo inicializa el SDK con el token que tienes en el momento de la
inicialización. No se suscribe a las actualizaciones del token. Aún
debes implementar
FirebaseMessagingService.onNewToken
y llamar a
Singular.setFCMDeviceToken(newToken)
allí para mantener actualizado el registro de Singular. El método de
configuración también no realiza ninguna acción de forma silenciosa
si el token proporcionado es
null
o está vacío.
Verificación y solución de problemas
Verificar la implementación
Confirma que el tracking de desinstalación esté funcionando correctamente.
- Verifica los logs: Confirma que el registro del token de FCM aparece en tus logs
- Prueba la generación del token: Asegúrate de que los tokens se generen en el primer lanzamiento de la aplicación
- Monitorea el dashboard: Revisa el dashboard de Singular para ver los datos de tracking de desinstalación después de 24-48 horas
- Prueba la actualización del token: Borra los datos de la aplicación y verifica que el token se actualice correctamente
Problemas comunes
- Token no generado: Verifica que las dependencias de FCM se hayan agregado correctamente y que Firebase esté configurado en tu proyecto
-
El token no se actualiza:
Verifica que el callback de
onNewToken()esté implementado en tu FirebaseMessagingService - Datos faltantes: Asegúrate de que los dispositivos cumplan con los requisitos de FCM (Android 4.1+, Servicios de Google Play instalados)
- Error de configuración: Confirma que el tracking de desinstalación esté habilitado en la configuración de la plataforma de Singular
Recursos adicionales: Para una solución de problemas detallada, consulta la Guía de configuración del tracking de desinstalación y la Documentación de Firebase Cloud Messaging .