1. Identidad y domicilio del responsable
El responsable del tratamiento de los datos personales recabados a través de la aplicación BusDot (en adelante, “la App”) es el operador de BusDot, contactable en fastracklogisticsmx@gmail.com.
Este aviso se emite conforme a la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (LFPDPPP) y su Reglamento.
2. Alcance
Este aviso cubre exclusivamente la App de pasajeros BusDot en:
- Android, identificador de aplicación
org.busdot.app - iOS, identificador de paquete
com.busdot.app
No cubre BusDotDriver, el panel de administración ni cuentas de conductores, propietarios de flota o administradores.
Puede usar la App como invitado, sin crear cuenta. En ese caso no se crea un perfil de pasajero ni una cuenta en el sistema de autenticación; sí se procesan, si usted lo autoriza, ubicación y datos técnicos necesarios para el radar, el mapa y (en Android) la publicidad.
3. Datos personales que recabamos
No recabamos CURP, domicilio particular, números de tarjeta, datos biométricos ni historial persistente de trayectos del pasajero. La ubicación del pasajero no se guarda como historial en la base de datos de perfiles.
3.1 Datos que usted nos proporciona
| Dato | Cuándo se recaba | Dónde se almacena |
|---|---|---|
| Correo electrónico | Registro o inicio de sesión con correo y contraseña, o inicio de sesión con Google | Supabase Auth (auth.users). También se guarda cifrado en el dispositivo mientras la sesión esté activa. |
| Contraseña | Registro o inicio de sesión con correo | La App la envía a Supabase Auth para autenticar. No se almacena en texto plano en el dispositivo ni en la tabla de perfiles. Supabase la guarda de forma hasheada. |
Nombre para mostrar (display_name / full_name) |
Al crear cuenta; también puede editarse en Perfil. Con Google puede tomarse del nombre de la cuenta. | Metadatos de Auth y tabla passenger_profiles (user_id, display_name, preferences, created_at, updated_at) |
Preferencias de perfil (preferences, JSON) |
Al crear el perfil de pasajero (inicialmente vacío) | passenger_profiles.preferences. El campo existe para ajustes del pasajero; no se usa hoy para guardar ubicación. |
3.2 Datos recabados automáticamente o con permiso del sistema
| Dato | Permiso / origen | Qué hace la App con él |
|---|---|---|
| Ubicación aproximada y precisa (latitud y longitud) | Android: ACCESS_FINE_LOCATION y ACCESS_COARSE_LOCATION. iOS: ubicación mientras se usa la App (NSLocationWhenInUseUsageDescription). |
Solo en el radar, para centrar el mapa y consultar unidades cercanas.
Se envía al servidor en cada consulta RPC nearby_bus_positions como
p_lat, p_lng, radio p_radius_m = 1 500 metros
y p_route_id de la ruta seleccionada.
Esa consulta se repite mientras el radar está activo (instantánea cada 45 segundos).
También se usa en el dispositivo para unirse a canales de tiempo real por celdas geohash
(precisión 6) alrededor de su posición.
No se escribe en passenger_profiles ni se conserva un historial de GPS del pasajero.
|
| Identificadores de sesión (access token, refresh token, user id, expiración) | Tras un inicio de sesión exitoso | Android: EncryptedSharedPreferences (AES-256). iOS: Llavero (Keychain) y, para la expiración, NSUserDefaults. Se borran al cerrar sesión. |
| Indicador de onboarding completado | Al pasar la pantalla de bienvenida | Almacenamiento local del dispositivo. Permanece aunque cierre sesión. |
| Desbloqueo temporal de ocupación (anuncio recompensado) | Tras ver un anuncio recompensado en Android | Solo en el dispositivo: fecha de expiración y si ya se concedió el primer desbloqueo (8 minutos la primera vez, 5 minutos después). No se envía al servidor de BusDot. |
| Estado de suscripción Premium | Google Play Billing, producto busdot_premium_monthly (solo Android; en iOS las compras no están disponibles aún) |
Google Play procesa el pago. La App consulta en el dispositivo si la suscripción está activa para ocultar anuncios. No enviamos el número de tarjeta a nuestros servidores. |
| Identificador de publicidad (AAID) y datos técnicos de anuncios | Android: permiso com.google.android.gms.permission.AD_ID y Google Mobile Ads (AdMob). Anuncios: banner, anuncio al abrir la App y anuncio recompensado para ver ocupación. |
Google AdMob puede recabar identificador de publicidad, IP, tipo de dispositivo, idioma, y en algunos casos ubicación aproximada, para servir y medir anuncios. No hay AdMob en la versión iOS actual. |
| Datos de mapa | SDK de Mapbox (Android e iOS) | Para dibujar el mapa y su posición. Mapbox recibe solicitudes de teselas y puede procesar datos técnicos (IP, región del mapa visible) conforme a su propia política. |
| Datos de Google Sign-In | Si elige “Continuar con Google” | La App recibe un id_token y un nonce y los envía a Supabase Auth (grant_type=id_token). Google puede tratar correo, nombre e identificador de cuenta según su política. No pedimos acceso a contactos ni al Drive. |
| Confirmación de correo | Al registrarse con correo | Supabase envía un enlace. Al confirmarlo se llama a la Edge Function email-confirmed para completar el alta. |
3.3 Datos que la App consulta pero no son suyos
Para mostrar el radar, la App lee catálogo público de rutas (id, short_name, name)
y posiciones de unidades reportadas por conductores (bus_id, route_id, latitud, longitud,
recorded_at, ocupación, destinos). Esos datos pertenecen a la operación de las unidades, no al pasajero.
Solo se muestran unidades con ubicación reciente (umbral de frescura: 120 segundos).
La App de pasajeros no escribe en tablas de conductores, solicitudes de vehículos, incidentes, flotas ni administradores.
3.4 Lo que no hacemos hoy
- No integramos Firebase Crashlytics ni Google Analytics en el código de BusDot pasajeros.
- No hay función en la App para eliminar la cuenta; la baja se atiende escribiendo a codexia.labs.admon@gmail.com (ver sección 7).
- No rastreamos al pasajero en segundo plano: en iOS la ubicación es “al usar la App”; en Android no se declara permiso de ubicación en segundo plano.
4. Finalidades del tratamiento
4.1 Finalidades primarias (necesarias para el servicio)
- Crear y mantener su cuenta de pasajero, si decide registrarse.
- Mostrar autobuses de la ruta elegida a 1,5 km de su posición.
- Actualizar el mapa en tiempo real mediante instantáneas y canales Realtime de Supabase.
- Permitir editar el nombre visible en el perfil.
- Restaurar la sesión en el mismo dispositivo.
4.2 Finalidades secundarias
- Publicidad (Android, usuarios sin Premium): banner, anuncio de apertura y anuncio recompensado para desbloquear ocupación de la unidad.
- Suscripción Premium (Android): quitar anuncios mediante Google Play.
Si no desea finalidades secundarias de publicidad, puede usar iOS (sin AdMob en la versión actual), suscribirse a Premium en Android, o limitar el identificador de publicidad en ajustes del sistema. El radar con ubicación sigue siendo una finalidad primaria si usa esa función.
5. Encargados, transferencias y terceros
Compartimos datos con proveedores que actúan como encargados o terceros independientes:
| Proveedor | Rol | Datos involucrados | Ubicación / política |
|---|---|---|---|
| Supabase (Postgres, Auth, Realtime, Edge Functions) | Backend de la App. Proyecto losmvkzqeqhiofbhzqgt.supabase.co |
Cuenta, perfil, consultas de radar con coordenadas, catálogo de rutas y posiciones de unidades | supabase.com/privacy |
| Google (Sign-In, Play Billing, AdMob, servicios de ubicación de Play) | Identidad, pagos, anuncios y GPS en Android | Token de Google, compras, identificador de publicidad, ubicación del dispositivo | policies.google.com/privacy |
| Mapbox | Mapas | Solicitudes de mapa y datos técnicos del SDK | mapbox.com/legal/privacy |
| Firebase Hosting (Google) | Alojamiento de este sitio de aviso de privacidad | Registros técnicos típicos de un sitio web (por ejemplo IP, fecha y recurso solicitado) | firebase.google.com/support/privacy |
| Apple | Sistema iOS, Sign in with Google en iOS, distribución | Datos de sistema y, si aplica, los que Apple trate al usar la App Store | apple.com/legal/privacy |
No vendemos su lista de correo ni su ubicación a brokers de datos. AdMob puede personalizar anuncios según las prácticas de Google; eso es tratamiento de un tercero independiente cuando usted usa la versión Android con anuncios activos.
6. Plazos de conservación
- Cuenta y perfil: mientras la cuenta exista y, tras una solicitud de baja, el tiempo necesario para concluirla y cumplir obligaciones legales.
- Consulta de radar: las coordenadas viajan en la petición para filtrar unidades; no se almacenan como perfil del pasajero. Los registros técnicos del servidor pueden existir el tiempo que configure el proveedor de infraestructura.
- Sesión local: hasta que cierre sesión o desinstale la App.
- Desbloqueo de ocupación: minutos (5 u 8) en el dispositivo.
- Compras: las conserva Google Play conforme a su relación con usted.
7. Derechos ARCO y revocación
Usted puede acceder, rectificar, cancelar u oponerse al tratamiento de sus datos (derechos ARCO), y revocar el consentimiento, en los términos de la LFPDPPP.
Desde la App puede:
- Rectificar el nombre en Perfil.
- Cerrar sesión (la App sigue en modo invitado; no borra la cuenta en el servidor).
- Revocar el permiso de ubicación en ajustes del sistema; el radar dejará de poder mostrar unidades cercanas.
- Limitar publicidad en ajustes de Google / Android.
- Cancelar Premium en Google Play.
Para cancelar la cuenta o solicitar acceso/eliminación de datos en servidor, escriba a codexia.labs.admon@gmail.com desde el correo asociado a la cuenta, indicando:
- Que la solicitud es sobre BusDot (pasajeros), no BusDotDriver.
- El correo de la cuenta.
- Si pide acceso, rectificación, cancelación, oposición o limitación de uso.
Responderemos en los plazos legales aplicables. Podemos pedir información para verificar identidad.
Si considera que su derecho de protección de datos ha sido lesionado, puede acudir al INAI: home.inai.org.mx.
8. Menores de edad
BusDot está pensada para uso general de transporte público. No dirigimos el servicio a menores de 18 años ni recabamos de forma intencional datos de menores. Si un tutor identifica una cuenta de un menor, puede solicitar su cancelación a codexia.labs.admon@gmail.com.
9. Medidas de seguridad
- Comunicación HTTPS / WSS con el backend.
- Tokens de sesión cifrados en Android; secretos en el Llavero de iOS.
- El perfil de pasajero se lee y actualiza con el token del usuario (no con una llave de servicio en la App).
- La App no solicita ubicación en segundo plano.
- Contraseñas no se almacenan en el perfil público.
Ningún sistema es 100 % seguro. Si detectamos un incidente que afecte sus datos, lo informaremos por los medios razonables, incluido el correo de la cuenta si existe.
10. Cambios a este aviso
Publicaremos la versión vigente en este sitio. La fecha de “última actualización” indica el inicio de vigencia. Si el cambio es sustancial (por ejemplo, nuevas categorías de datos o finalidades), lo reflejaremos aquí y, cuando la ley lo exija, solicitaremos un nuevo consentimiento.
URL de este aviso (para Play Console / App Store): la dirección de Firebase Hosting de este sitio.