Los servicios de GPS y geolocalización en aplicaciones móviles son API para determinar la ubicación física de un dispositivo mediante satélites, Wi-Fi y redes móviles. Según la Google Android Location Guide (2025), más del 60% de las aplicaciones móviles utilizan datos de ubicación para personalizar el contenido. El Fused Location Provider en Android combina múltiples fuentes para mejorar la precisión y reducir el consumo de energía.
Puntos clave
GPS (Global Positioning System) es un sistema de navegación por satélite compuesto por 31 satélites activos en órbita a una altitud de aproximadamente 20.200 km. En los dispositivos móviles, el chip GPS recibe señales de los satélites y calcula las coordenadas mediante trilateración — medición del tiempo de viaje de la señal desde múltiples satélites. Los servicios de geolocalización en los sistemas operativos móviles añaden datos de puntos de acceso Wi-Fi y torres de telefonía al GPS para un posicionamiento más rápido (A-GPS) y una mejor precisión en interiores. Según GPS.gov (2024), la precisión del GPS civil es de 3 a 5 metros en condiciones de cielo despejado y de hasta 15 metros en áreas urbanas densas.
Los dispositivos móviles modernos no solo admiten el sistema GPS estadounidense, sino también otros sistemas globales de navegación por satélite: el GLONASS ruso (24 satélites), el Galileo europeo (28 satélites) y el BeiDou chino. La compatibilidad con múltiples sistemas simultáneamente mejora la precisión y la velocidad del posicionamiento — el dispositivo puede utilizar hasta 40 satélites de diferentes sistemas para calcular su posición. En iOS y Android, la selección del sistema satelital se maneja automáticamente a nivel del chip de hardware, y los desarrolladores no necesitan administrar esto.
El proceso de determinar la ubicación en un dispositivo móvil consta de varias etapas: recopilación de datos de fuentes (satélites, Wi-Fi, celdas), filtrado y corrección de errores, cálculo de coordenadas y entrega del resultado a la aplicación. El sistema operativo gestiona este proceso a través de un servicio de geolocalización unificado que optimiza todas las fuentes para ahorrar batería. A continuación se describen las tres principales fuentes de datos de ubicación.
La navegación por satélite proporciona la máxima precisión (3 a 5 metros), pero requiere una vista despejada del cielo. En interiores o en áreas urbanas densas, la señal GPS puede debilitarse o perderse por completo. El tiempo para la primera fijación (TTFF) es de 30 a 60 segundos para un arranque en frío y de 5 a 10 segundos para un arranque en caliente. A-GPS (GPS Asistido) acelera el inicio al descargar datos de efemérides de los satélites a través de internet en lugar de esperar los datos de los satélites.
El posicionamiento Wi-Fi utiliza una base de datos de direcciones MAC de puntos de acceso con coordenadas conocidas. La precisión es de 10 a 50 metros dentro de la cobertura Wi-Fi. Las torres de telefonía proporcionan una precisión de 100 metros a varios kilómetros según la densidad de torres. La combinación de todas las fuentes (Fused Location) permite obtener coordenadas con precisión razonable y un consumo de energía mínimo — especialmente cuando el chip GPS está apagado o las señales satelitales no están disponibles.
En ambas plataformas, los servicios de geolocalización se implementan a través de API del sistema con diferentes grados de abstracción. Android utiliza FusedLocationProviderClient de Google Play Services, iOS utiliza CLLocationManager de Core Location. Ambas API permiten solicitar una posición única o suscribirse a actualizaciones periódicas. A continuación se muestra un ejemplo de obtención de coordenadas en Android usando el Fused Location Provider en Kotlin.
val fusedClient = LocationServices.getFusedLocationProviderClient(this)
val locationRequest = LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY
)
.setIntervalMillis(5000)
.setMinUpdateIntervalMillis(2000)
.build()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { location ->
Log.d("Ubicación", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
En el ejemplo, LocationRequest se configura con PRIORITY_HIGH_ACCURACY — esto activa el GPS para la máxima precisión. setIntervalMillis establece el intervalo de actualización deseado (5 segundos), setMinUpdateIntervalMillis establece el intervalo mínimo (2 segundos). El callback onLocationResult se invoca cada vez que el sistema recibe nuevas coordenadas. Es importante verificar el permiso antes de llamar a requestLocationUpdates — de lo contrario, la aplicación fallará con una SecurityException.
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
// MARCA: - CLLocationManagerDelegate
func locationManager(
_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]
) {
guard let location = locations.last else { return }
print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}
En iOS, desiredAccuracy determina la precisión de la solicitud: kCLLocationAccuracyBest utiliza todas las fuentes disponibles (GPS + Wi-Fi + celdas). Después de solicitar el permiso mediante requestWhenInUseAuthorization, el sistema muestra un diálogo al usuario. El delegado didUpdateLocations recibe un array de objetos CLLocation con coordenadas, altitud, velocidad y rumbo. Para detener las actualizaciones, se llama a stopUpdatingLocation para ahorrar batería.
El acceso a la geolocalización requiere el permiso explícito del usuario en ambas plataformas. En Android se utilizan los permisos ACCESS_FINE_LOCATION (GPS) y ACCESS_COARSE_LOCATION (Wi-Fi/celdas). A partir de Android 10, el acceso en segundo plano requiere un permiso separado ACCESS_BACKGROUND_LOCATION. En iOS hay tres niveles disponibles: requestWhenInUseAuthorization (solo cuando la aplicación está activa), requestAlwaysAuthorization (en segundo plano) y marcas de tiempo temporales para posicionamiento preciso. Apple requiere una descripción obligatoria en Info.plist: NSLocationWhenInUseUsageDescription o NSLocationAlwaysAndWhenInUseUsageDescription. Sin estas claves, la solicitud de permiso se ignora.
El uso continuo del GPS agota significativamente la batería — hasta un 30% por hora de funcionamiento continuo a máxima precisión. Para optimizar el consumo de energía, se recomienda usar la geolocalización solo cuando sea necesario y detener las actualizaciones cuando la aplicación pase a segundo plano. En Android, FusedLocationProviderClient cambia automáticamente entre GPS y fuentes de red según la disponibilidad y la prioridad de la solicitud. En iOS, use el servicio de cambio significativo de ubicación (startMonitoringSignificantLocationChanges) para actualizaciones con consumo de energía mínimo — la precisión es menor (hasta 500 metros), pero la batería casi no se gasta. También practique el procesamiento por lotes: recolecte coordenadas en intervalos de 5 a 10 minutos y envíelas al servidor en una sola solicitud mediante WorkManager en Android o BGTaskScheduler en iOS. Reducir la frecuencia de solicitudes de 1 segundo a 30 segundos reduce el consumo de energía de la geolocalización en un 85%.
La geolocalización se utiliza en una amplia gama de aplicaciones móviles: desde navegadores hasta servicios de entrega. Los escenarios más comunes incluyen mostrar al usuario en un mapa, publicidad geodirigida, seguimiento de repartidores, geocercas para notificaciones push y seguimiento de actividad física. Cada escenario requiere su propio enfoque de precisión y frecuencia de actualización. A continuación se muestra una tabla con recomendaciones de configuración para diferentes tipos de aplicaciones.
| Tipo de aplicación | Precisión | Intervalo | Modo segundo plano |
|---|---|---|---|
| Navegador | HIGH (GPS) | 1-2 seg | Sí |
| Entrega | BALANCED (GPS+Wi-Fi) | 10-30 seg | Sí |
| Clima | LOW (Wi-Fi/celdas) | Una vez | No |
| Red social | BALANCED | Al abrir | No |
| Fitness | HIGH (GPS) | 5-10 seg | Sí |
Al diseñar la funcionalidad de geolocalización, es importante considerar que los usuarios pueden revocar el permiso en cualquier momento a través de la configuración del sistema. La aplicación debe manejar adecuadamente las situaciones en las que la geolocalización no está disponible y mostrar una explicación clara de por qué la funcionalidad está limitada.
Geofencing es una tecnología para crear límites virtuales en un mapa. Cuando se cruzan estos límites, la aplicación recibe una notificación. En Android, las geocercas se implementan a través de GeofencingClient de Google Play Services, en iOS — a través de CLCircularRegion de Core Location. Al entrar o salir de una zona, el sistema activa la aplicación y envía un evento incluso si la aplicación está cerrada o minimizada. Esto se utiliza para notificaciones push al acercarse a una tienda, recordatorios de tareas basados en ubicación y automatización de dispositivos IoT. El número máximo de geocercas es limitado: 100 en Android, 20 en iOS simultáneamente. El radio mínimo de la zona es de 50 metros en ambas plataformas — de lo contrario, el sistema podría no activarse debido a imprecisiones en la determinación de la ubicación. Al entrar en una zona, el sistema inicia un Intent en Android o llama al delegado locationManager:didEnterRegion en iOS.
Preguntas frecuentes
El GPS en un teléfono inteligente es un receptor integrado de señales del sistema de navegación por satélite que determina coordenadas con una precisión de 3 a 5 metros. Los dispositivos también admiten GLONASS, Galileo y BeiDou para mejorar la precisión y la velocidad de posicionamiento.
El GPS es solo un método satelital para determinar coordenadas. Los servicios de geolocalización combinan GPS, posicionamiento Wi-Fi y datos de torres de telefonía para una determinación de ubicación más rápida y eficiente energéticamente, especialmente en interiores.
Llame a requestWhenInUseAuthorization() o requestAlwaysAuthorization() en una instancia de CLLocationManager. Primero, agregue NSLocationWhenInUseUsageDescription en Info.plist con una explicación clara de por qué se necesita la geolocalización.
Use FusedLocationProviderClient en Android y el servicio de cambio significativo de ubicación en iOS. Aumente el intervalo entre solicitudes a 10-30 segundos, desactive las actualizaciones cuando la pantalla esté apagada y aplique el envío por lotes de coordenadas al servidor.
Sí, sin GPS se puede determinar la ubicación aproximada usando puntos de acceso Wi-Fi (precisión de 10 a 50 metros) o torres de telefonía (precisión de 100 a 5000 metros). En Android, se utiliza ACCESS_COARSE_LOCATION para esto.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también