Seguimiento de desinstalaciones
Realiza un seguimiento de las desinstalaciones de apps para medir la retención de usuarios y optimizar las campañas de reenganche integrando Firebase Cloud Messaging (FCM) con Singular SDK.
Importante: Google dejó obsoletas las API de GCM en abril de 2018. Utiliza Firebase Cloud Messaging (FCM) para todas las implementaciones de seguimiento de desinstalaciones.
Requisitos previos
Configurar la plataforma Singular
Antes de implementar el seguimiento de desinstalaciones en tu app, configura tu app en la plataforma Singular siguiendo la guía Configurar el seguimiento de desinstalaciones de Android.
Requisitos del sistema
El seguimiento de desinstalaciones 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 instalada la aplicación Google Play Store
- Compatibilidad con emuladores: Se admiten emuladores de Android 4.1+ con API de Google
- Distribución: Las aplicaciones se pueden distribuir fuera de Google Play Store sin dejar de admitir el seguimiento de desinstalaciones.
Nota: no se realizará el seguimiento de las desinstalaciones de los usuarios que utilicen versiones de Android no compatibles o dispositivos sin Google Play Services.
Pasos de implementación
Paso 1: Integrar Firebase Cloud Messaging
Configura Firebase Cloud Messaging en tu aplicación si aún no está configurada.
Siga la guía oficial de Google para configurar una aplicación cliente de Firebase Cloud Messaging en Android, que incluye:
- Añadir Firebase a tu proyecto Android
-
Añadir la dependencia FCM SDK a tu
app/build.gradle - Crear una clase Firebase Messaging Service
- Solicitar permisos de notificación (Android 13+)
Paso 2: Configurar AndroidManifest.xml
Registre su servicio de mensajería Firebase en el manifiesto de Android para recibir mensajes FCM.
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Importante: Sustituya .MyFirebaseMessagingService por el nombre completo de su clase que extienda FirebaseMessagingService.
Paso 3: Registrar el token de dispositivo FCM
Recupere el token de dispositivo FCM y envíelo a Singular para el seguimiento de la desinstalación.
Recuperar y registrar token
Obtenga el token de FCM y regístrelo en Singular inmediatamente después de la inicialización del 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);
}
});
}
}
Práctica recomendada: Registre el token FCM inmediatamente después de Singular.init() para garantizar que el seguimiento de la desinstalación esté activado desde la primera sesión de la aplicación.
Actualización del token
Actualice el token FCM con Singular cada vez que se actualice para mantener un seguimiento preciso de la desinstalación.
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 FCM pueden actualizarse en cualquier momento (actualizaciones de la aplicación, restauración del dispositivo, etc.). Implemente siempre onNewToken() para mantener Singular actualizado.
Método de configuración alternativo
Establecer token durante la inicialización
Si dispone del token FCM antes de la inicialización del SDK, configúrelo 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 token)
Verificación y resolución de problemas
Verificación de la implementación
Confirme que el seguimiento de la desinstalación funciona correctamente.
- Compruebe los registros: Verifique que el registro de tokens de FCM aparece en sus registros.
- Pruebe la generación de tokens: Asegúrese de que los tokens se generan en el primer lanzamiento de la aplicación.
- Supervise el panel de control: Compruebe los datos de seguimiento de desinstalación del panel de Singular transcurridas 24-48 horas.
- Prueba de actualización de tokens: Borre los datos de la aplicación y compruebe que los tokens se actualizan correctamente
Problemas comunes
- Token no generado: Compruebe que las dependencias de FCM se han añadido correctamente y que Firebase está configurado en su proyecto.
-
El token no se actualiza: Compruebe que
onNewToken()callback está implementado en su FirebaseMessagingService - Faltan datos: Asegúrate de que los dispositivos cumplen los requisitos de FCM (Android 4.1+, Google Play Services instalado)
- Error de configuración: Confirma que el seguimiento de desinstalación está habilitado en la configuración de la plataforma Singular
Recursos adicionales: Para obtener información detallada sobre la solución de problemas, consulta la Guía de configuración del seguimiento de desinstalacionesy la Documentación de Firebase Cloud Messaging.