Por qué Radar Covid no funciona sin el GPS activo en Android pero sí lo hace en los iPhone

En Android la app de Radar Covid necesita que tengas Bluetooth y el GPS activados. En iOS solo necesitas Bluetooth. ¿Por qué? Esa es una de las cuestiones que más polémica han generado estos días.

Aunque Radar Covid ya está disponible, no estará completamente funcional hasta que las Comunidades Autónomas la activen en las próximas semanas. Quienes han comenzado a instalarla han detectado que en móviles Android es necesario tener activado el GPS, lo que genera suspicacias respecto a Google y su habitual recolección de datos. ¿Por qué es eso necesario en Android y no en iOS? ¿Está nuestra privacidad en peligro?

La implementación de Google de la tecnología Bluetooth Scanning tiene la culpa
Cuando Google lanzó Android 6.0 Mashmallow en septiembre de 2015 lo hizo con novedades importantes en varios apartados, incluido el de la tecnología Bluetooth Low Energy Scanning.

La propia especificación de la documentación de Android lo dejaba claro: "un dispositivo Android puede escanear dispositivos Bluetooth específicos más eficientemente cuando se usa el BLE" Estas API permitían a los desarrolladores crear filtros para encontrar dispositivos de forma más sencilla, pero esa opción tenía un requisito del que la propia Google advertía:

"El escaneo BLE necesita permisos de localización, ya que el escaneo BLE identifica objetos que podrían ser usados para la geolocalización. Al desactivar los servicios de localización se desactivará la exploración de Bluetooth"

Cuando los desarrolladores descubrieron esa forma de funcionar de BLE Scanning se quejaron en los foros internos de Google. La respuesta de los ingenieros de Google fue contundente: "No se arreglará (comportamiento intencionado)".

La descripción de la característica en las notas de la versión Android 6.0 que aludían a sus cambios volvía a insistir en la forma de funcionar de BLE Scanning:

"Para brindar una mejor protección de datos a los usuarios, a partir de esta versión, en Android se quita el acceso por programación al identificador de hardware local del dispositivo para apps que usen las Wi-Fi y Bluetooth API. Los métodos WifiInfo.getMacAddress() y BluetoothAdapter.getAddress() ahora muestran un valor constante de 02:00:00:00:00:00.

Para acceder a los identificadores de hardware de dispositivos externos cercanos por medio de escaneos de Bluetooth y Wi-Fi, ahora tu app debe tener los permisos ACCESSFINELOCATION o ACCESSCOARSELOCATION".

Las críticas a esa forma de implementar esta característica fueron notables por parte de los desarrolladores que participaron en ese debate. El mensaje de uno de ellos expresaba el sentir general: "la mayoría de la gente negará el acceso a la ubicación en cuanto se lo pidan porque asumirán que eso significa que se hará seguimiento de su localización vía GPS".

A las críticas sobre la privacidad se sumaban las que afectaban a la autonomía de la batería, y hace unas semanas el debate se reactivaba cuando algunos desarrolladores notaron cómo eso podía afectar a las aplicaciones de rastreo de contactos. "La aplicación de rastreo de contactos de Suiza", explicaba uno de ellos, "no se puede usar en Android en el modo de ahorro de batería [...] Esto no es aceptable ni amigable".

"Una chapuza que no tiene sentido"
Los responsables de este desarrollo precisamente creaban una queja en el repositorio de GitHub del proyecto DP-3T descentralizado en el que muchas soluciones de rastreo de contacto tratan de basarse. En el gestor de tickets de Google también se comenta el problema e incluso se hace referencia específica a cómo Radar Covid necesita tener los servicios de localización activados, algo que para el desarrollador "no tiene sentido".

Algunos proponen cambios a Google Play Services, el componente a través del cual se distribuye la API para las apps de rastreo de contactos por COVID-19. Según algunos, una actualización a este componente podría ofrecer una solución parcial que no obstante "solo llegaría a un pequeño porcentaje de usuarios".

Un desarrollador explicaba en mayo de 2017 cómo aunque este comportamiento es "intencionado" según Google, no hay argumentos claros para que la implementación haga necesaria la activación de los servicios de localización. De hecho, indica, "es posible escanear sin habilitar los servicios de Localización". Para ello es necesario hacer una llamada especial, "BluetoothAdapter.getDefaultAdapter().startDiscovery()" que permite descubrir dispositivos Bluetooth y BLE, pero tiene un inconveniente: "los dispositivos BLE no tendrán el registro del escaneo que tendrían si fueran descubiertos a través de la función startScan()".

La implementación de Google desde luego no parece ideal, y de hecho uno de nuestros lectores, thebronx, comentaba todo esto en el tema sobre la disponibilidad de Radar Covid. Allí indicaba cómo tener activado el servicio de localización es necesario porque "si puedo saber el identificador (la MAC) del adaptador bluetooth y tengo acceso a otros móviles cercanos, con que uno de ellos tenga el GPS activo podré saber la posición de todos los demás. Así que Google decidió que para acceder a este identificador había que pedir permisos de localización".

Este usuario concluía con el sentir de muchos otros desarrolladores en esas quejas a este sistema: esto es, decía, "una chapuza de Google que no tiene sentido". Aquí pedía que la aplicación fuera Open Source, y aquí lo cierto es que Google y Apple han publicdo el código del sistema de notificación de aplicacines y ambas han dado datos](https://www.apple.com/covid19/contacttracing/ "") sobre su implementación.

Android necesita los servicios de localización activos para Radar Covid, pero no registra nada
La documentación actual de Android también expande la información sobre el funcionamiento de la tecnología Bluetooth en los dispositivos Android:

De hecho aclaraba que "los servicios de localización pueden usar 3 formas de localizar: por Bluetooth, por WiFi o por GPS. En este caso la API de localización usa solo la de Bluetooth para el escaneo y medir la distancia entre dispositivos para saber la incidencia o no de la exposición, pero no puede geolocalizarte físicamente y la API Exposure Notification no registra dato alguno de localización. El ID que se genera aleatorio, es lo único que se transmite, junto al dato de la intensidad de la señal Bluetooth. No hay dato de localización alguno en la transmisión ni el sistema lo almacena. Y esto está auditado porque el código de Exposure Notification es abierto".

En la propia documentación del sistema de notificación de exposición de Google los responsables de la empresa ya trataban de aclarar esas dudas indicando que este sistema y las aplicaciones que lo utilizan "no utiliza tus datos de ubicación. Las aplicaciones que utilizan este sistema no pueden solicitar permiso para usar la ubicación de tu dispositivo".

De hecho también se daba contestación a la pregunta que todos nos hacemos: si Radar Covid no utiliza mis datos de ubicación, "¿por qué tengo que activar los ajustes de ubicación del teléfono para usarlo?". La respuesta de Google trata de aclararlo:

"La tecnología de las notificaciones de exposición utiliza la búsqueda de dispositivos Bluetooth para saber cuáles están cerca. En todos los teléfonos con Android 6.0 y versiones superiores, para poder usar esa búsqueda Bluetooth, tienen que estar activados los ajustes de ubicación del dispositivo para todas las aplicaciones, no solo para las que usan el sistema de notificaciones de exposición.

Google y Apple han incorporado medidas de protección para que las aplicaciones gubernamentales de seguimiento de contactos con el sistema ENS no puedan deducir tu ubicación. Para que no se pueda hacer el seguimiento de tu dispositivo, se le asignan ID aleatorios que van rotando. Estos ID no contienen información sobre tu ubicación cuando se comunican con otros dispositivos del sistema".

En Google señalan además que es posible controlar el acceso a los permisos de aplicaciones desde los ajustes de Android. Julio César Fernández Muñoz añadía que "una cosa es que necesite los permisos de localización de la app para determinar la distancia con los dispositivos alrededor (por dependencias de las librerías) y otra es que use tu localización. En ningún momento la API pide permiso de localización por popup", es decir, esa notificación emergente que aparece en Android cuando una aplicación necesita cierto permiso específico para poder ejecutarse y funcionar.