Saltar al contenido principal

Alternativa a Transistorsoft Background Geolocation

Una alternativa gratuita y open source a Transistorsoft background geolocation para Capacitor 8: funciones, licencias, configuración, geofencing y guía de migración.

Ilustración de seguimiento de ubicación y pines de mapa para una comparación de plugins de Capacitor background geolocation

Si buscas una alternativa a Transistorsoft background geolocation para Capacitor, la opción gratuita más cercana es @capgo/background-geolocation. Tiene licencia MIT, está disponible para Capacitor 8, rastrea la ubicación en segundo plano en iOS y Android, soporta geofencing nativo y puede hacer POST de ubicaciones a tu servidor desde code nativos. No replica todas las funciones de Transistorsoft, por lo que esta guía explica qué ganas, qué pierdes y cómo migrar.

Por qué los equipos buscan una alternativa a Transistorsoft

El SDK de Transistorsoft es un producto maduro que lleva años impulsando apps de flotas, reparto y fitness. Los usuarios rara vez lo dejan porque esté roto; lo dejan por estas razones:

Los builds de release ahora requieren una clave en ambas plataformas

Según el changelog de Transistorsoft, la versión 9.0.0 pasó a usar una clave de licencia basada en JWT y empezó a requerir una clave también en iOS. Antes de la v9, solo los builds de release de Android estaban bloqueados. Las claves de la v8 y anteriores no funcionan con la v9, así que actualizar el plugin también implica generar nuevas claves desde su dashboard.

Su tienda vende licencias perpetuas por identificador de app, desde una clave hasta 100, con un año de actualizaciones incluido. Los complementos, como el geofencing poligonal, ahora se codifican en la misma clave. Para una app, es un precio razonable. Para una agencia con 20 apps white label, o una empresa que publica bundle IDs separados para staging y producción, la licencia se convierte en una partida que alguien tiene que gestionar cada año.

El motor principal es un binario

El wrapper de Capacitor es abierto, pero el motor de ubicación se distribuye como un framework iOS precompilado y una librería Android desde Maven. Cuando algo extraño ocurre en un OEM de Android específico, no puedes leer ni parchear el code que decide cuándo registrar una posición. Algunos equipos lo aceptan. Los equipos con requisitos estrictos de auditoría, o los que simplemente quieren recorrer paso a paso el code en Xcode, a menudo no lo hacen.

Opciones de configuración

El plugin expone un objeto de configuración muy grande: detección de movimiento, programación, odómetro, persistencia en SQLite, plantillas de sincronización HTTP, tareas headless y más. Si necesitas todo, genial. Si solo necesitas «enviar mi posición cada 30 segundos mientras el conductor está de turno», hay demasiados ajustes que entender.

Qué hace @capgo/background-geolocation

El plugin Capgo nació de la larga historia de los forks de geolocalización en segundo plano de Cordova y del plugin comunitario ligero Capacitor. El objetivo es obtener posiciones precisas, un funcionamiento fiable en segundo plano y geofencing nativo, sin licencia.

Funciones actuales de la línea 8.x:

  • Actualizaciones de ubicación en primer plano y segundo plano a través de un único start() llamada con un callback.
  • distanceFilter y minIntervalMs to control how often points arrive.
  • HTTP POST nativo de cada ubicación a un url que configures, con headers y updateHeaders() para la rotación de tokens.
  • Geocercas circulares nativas con eventos de entrada y salida, y un webhook nativo para transiciones.
  • checkPermissions() y requestPermissions() que distinguen entre When In Use y Always en iOS.
  • openSettings() para usuarios que denegaron el permiso.
  • setPlannedRoute() para reproducir un sonido cuando el usuario se sale de una ruta planificada.
  • Android opcional networkFallback que rellena los huecos del GPS con ubicaciones de red.
  • Una implementación web para desarrollo y pruebas en el navegador.

Comparativa de funciones

Capacidad Transistorsoft (v9) @capgo/background-geolocation
Licencia Clave de pago para builds de release, por app ID MIT, gratis
Fuente Wrapper abierto, binario del motor Totalmente open source
Capacitor 8 Sí Sí
Seguimiento en segundo plano Sí Sí
Máquina de estados de detección de movimiento Sí No
Subida HTTP nativa Sí, con cola SQLite y batching Sí, POST best effort, sin cola en disco
Geofencing Sí, polígono como add-on Geocercas circulares en iOS y Android
Eventos de geocerca enviados a tu servidor Sí, mediante sincronización HTTP Sí, webhook nativo
Seguimiento tras cerrar la app (Android) Sí Sí, con url configura
Seguimiento tras reinicio Sí (startOnBoot) No
Programación, odómetro Sí No

Resumen honesto: Transistorsoft encaja mejor cuando la app debe decidir por sí sola cuándo hacer tracking, sobrevivir a reinicios y guardar semanas de puntos offline. El plugin Capgo encaja mejor cuando el usuario o tu app inician el tracking explícitamente y quieres fixes precisos sin licencia y code legible.

Instalación y configuración

bun add @capgo/background-geolocation
bunx cap sync

iOS

Añade las cadenas de uso y el modo de ubicación en segundo plano a ios/App/App/Info.plist:

<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show your route.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We use your location in the background to record your route while the phone is locked.</string>
<key>UIBackgroundModes</key>
<array>
  <string>location</string>
</array>

Recuerda que las subidas a la App Store requieren Xcode 26 desde abril de 2026. Si tu imagen de CI es anterior, la subida será rechazada aunque el build tenga éxito. Build de Capgo se ejecuta en las imágenes actuales de Xcode si no quieres mantener Macs.

Android

El plugin usa un servicio en primer plano con una notificación persistente mientras rastrea en segundo plano. En Android 13 y versiones posteriores, solicita POST_NOTIFICATIONS una vez que se concede el permiso de ubicación para poder mostrar la notificación.

Configurar useLegacyBridge en capacitor.config.ts. Sin él, las callbacks de ubicación a la WebView pueden detenerse después de unos cinco minutos en segundo plano:

import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.tracker',
  appName: 'Tracker',
  webDir: 'dist',
  android: {
    useLegacyBridge: true,
  },
};

export default config;

Puedes personalizar el nombre del canal de notificación, el icono y el color a través de strings.xml claves documentadas en docs del plugin.

Iniciar el tracking

import { BackgroundGeolocation } from '@capgo/background-geolocation';

export async function startShift(token: string) {
  await BackgroundGeolocation.start(
    {
      backgroundTitle: 'Shift in progress',
      backgroundMessage: 'Your location is shared with dispatch until you end the shift.',
      requestPermissions: true,
      stale: false,
      distanceFilter: 25,
      url: 'https://api.example.com/v1/locations',
      headers: { Authorization: `Bearer ${token}` },
      minIntervalMs: 30_000,
    },
    (location, error) => {
      if (error) {
        if (error.code === 'NOT_AUTHORIZED') {
          BackgroundGeolocation.openSettings();
        }
        console.error(error);
        return;
      }
      if (location) {
        // Update the UI while the WebView is alive
        console.log(location.latitude, location.longitude, location.accuracy);
      }
    },
  );
}

export async function endShift() {
  await BackgroundGeolocation.stop();
}

Dos opciones importan más de lo que parecen:

  • backgroundMessage es lo que activa las actualizaciones en segundo plano en ambas plataformas. Sin esto, las actualizaciones solo están garantizadas en primer plano. En Android, también es el texto de la notificación del servicio en primer plano.
  • url envía cada punto desde el code nativo con un "source": "native" campo en el cuerpo. Esa ruta no depende del WebView, lo que permite que los datos sigan fluyendo cuando Android limita el WebView o iOS suspende JavaScript. En Android, configurar url también hace que el servicio sea persistente (sticky), para que los puntos sigan llegando a tu servidor tras cerrar la app. Necesitas ambas opciones para un rastreo fiable en segundo plano.

Cuando expire el access token, rótalo sin reiniciar la sesión:

await BackgroundGeolocation.updateHeaders({
  headers: { Authorization: `Bearer ${newToken}` },
});

Geofencing

Los usuarios de Transistorsoft suelen depender de su geofencing. El plugin Capgo cubre regiones circulares con APIs nativas en ambas plataformas:

import { BackgroundGeolocation } from '@capgo/background-geolocation';

await BackgroundGeolocation.setupGeofencing({
  url: 'https://api.example.com/v1/geofence-events',
  headers: { Authorization: 'Bearer <token>' },
  notifyOnEntry: true,
  notifyOnExit: true,
  payload: { driverId: 'd-381' },
  backgroundLocation: true, // Android only, needs ACCESS_BACKGROUND_LOCATION in your manifest
});

await BackgroundGeolocation.addGeofence({
  identifier: 'depot-north',
  latitude: 48.8584,
  longitude: 2.2945,
  radius: 200,
  payload: { depotId: 'north' },
});

await BackgroundGeolocation.addListener('geofenceTransition', (event) => {
  console.log(event.identifier, event.transition, event.payload);
});

iOS requiere autorización "Always" para geofencing. En Android 10 y versiones posteriores, el geofencing en segundo plano requiere ACCESS_BACKGROUND_LOCATION, que el plugin no añade por ti. Solo añádelo si tu app tiene la aprobación de Google Play para la ubicación en segundo plano. Si tus geofences se comportan de forma extraña en iOS, lee nuestra guía sobre por qué los geofences no se activan en iOS.

Migración desde Transistorsoft

Las APIs son distintas, así que planea una pequeña reescritura de tu servicio de ubicación en lugar de un simple buscar y reemplazar.

Concepto de Transistorsoft Equivalente en Capgo
ready(config) + start() start(options, callback)
onLocation listener El start() callback
stop() stop()
distanceFilter distanceFilter
url, headers HTTP sync url, headers, updateHeaders()
addGeofence / onGeofence addGeofence / geofenceTransition
removeGeofence(s) removeGeofence / removeAllGeofences
getGeofences getMonitoredGeofences
Helpers de permisos checkPermissions / requestPermissions
Detección de movimiento, programación y odómetro Implementar en la lógica de tu app o en el servidor

Pasos que funcionan bien en la práctica:

  1. Encapsula el acceso a la ubicación en un pequeño servicio de tu app (startTracking, stopTracking, onPoint). La mayoría de las apps ya tienen uno.
  2. Implementa el servicio con el plugin Capgo detrás de un feature flag o en un build separado.
  3. Haz que tu backend acepte el JSON de ubicación del plugin. El cuerpo coincide con Location tipo (latitude, longitude, accuracy, speed, bearing, time y así sucesivamente) más source.
  4. Elimina el plugin de Transistorsoft, sus claves de licencia, las variables de Gradle adicionales y los modos en segundo plano que ya no necesites.
  5. Prueba en dispositivos reales con la pantalla bloqueada durante al menos 30 minutos, en un Pixel, un Samsung y un iPhone como mínimo.

Los cambios en plugins nativos requieren un nuevo build para la tienda. Una vez que ese build esté publicado, puedes seguir enviando correcciones de JavaScript a tu UI de seguimiento con actualizaciones Live Update de Capgo sin otro ciclo de revisión.

Cuando el plugin Capgo no es suficiente

Ten esto claro antes de cambiar:

  • Sin cola persistente. Las POST nativas son best effort. Si el dispositivo está sin conexión, los puntos fallidos se registran y se descartan. Si no puedes perder un punto, guárdalos también localmente en el callback (por ejemplo, con SQLite) y sincronízalos desde la app, o mantén Transistorsoft.
  • No se reinicia tras reiniciar el dispositivo. El seguimiento se reanuda la próxima vez que el usuario abra la app.
  • Sin detección automática de movimiento. La app decide cuándo iniciar y detener.
  • Terminación en iOS. Si el usuario fuerza el cierre en iOS, las actualizaciones estándar de ubicación se detienen. Es una regla del SO, no una limitación del plugin.

Para más contexto sobre lo que Capacitor puede ejecutar mientras la app está en segundo plano, ver cómo funcionan las tareas en segundo plano en Capacitor.

Solución de problemas

Las actualizaciones se detienen tras unos minutos en Android. Verificar useLegacyBridge: true, confirma que la notificación del servicio en primer plano es visible y desactiva la optimización de batería para la app durante las pruebas en OEMs agresivos. Usa la url opción para que la entrega no dependa del WebView.

Sin actualizaciones en segundo plano en iOS. Confirmar UIBackgroundModes contiene location, que pasaste backgroundMessage, y que llamaste a start() mientras la app estaba en primer plano. Nuestra guía sobre por qué iOS detiene la ubicación en segundo plano analiza cada una de las causas.

NOT_AUTHORIZED error. El usuario denegó la ubicación. Llama a openSettings() después de explicar por qué la app lo necesita.

Puntos erráticos en interiores. Aumenta distanceFilter, ignora los puntos con valores accuracy grandes, y en Android considera networkFallback: true solo si las correcciones aproximadas son aceptables.

Ubicaciones simuladas en una app de entregas. Cada Location tiene un simulated flag. Para validaciones más estrictas, añade @capgo/capacitor-mock-location-detector.

Elegir

Elige Transistorsoft si necesitas inicio automático por movimiento, persistencia tras reinicio, cola offline y geofences de polígonos, y el coste de la licencia te encaja. Elige @capgo/background-geolocation si tu tracking es por sesión, quieres code legible y sin licencia por app, y no te importa encargarte de la cola en tu app. Si vas a sustituir varios SDK nativos de pago a la vez, la Alternativas a plugins de Ionic Enterprise página enumera otros reemplazos de Capgo.

Live updates para apps Capacitor

Cuando un bug de la capa web está en producción, publica el fix a través de Capgo en lugar de esperar días a la aprobación de la app store. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen el flujo de revisión habitual.

Lo último de nuestro blog

Capgo te da la información clave que necesitas para crear una app móvil realmente profesional.