Skip to content

Dispositivos y Distribucion

Requisitos para la certificacion en dispositivos moviles y la distribucion de las aplicaciones PUDO Manager y Carrier App.


1. Aplicaciones Moviles

1.1 PUDO Manager

Aplicacion para operadores de puntos PUDO. Gestiona recepcion, entrega con POD (firma + foto + DNI), handshake dual-QR con transportistas, capacidad y historial.

AtributoValor
PlataformasiOS, Android, macOS (solo desarrollo)
Bundle ID iOS/macOScom.ontime.proximiti.pudoManagerApp
Application ID Androidcom.ontime.proximiti.pudomanager
OIDC redirect URIcom.ontime.proximiti.pudomanager:/callback
Flutter SDK>=3.0.0 <5.0.0
Version actual1.0.0+1

Permisos requeridos:

PermisoUsoPlataforma
CamaraEscaneo de codigos de barras y QRiOS, Android
Galeria / FotosCaptura de POD (foto del paquete, DNI)iOS, Android
Almacenamiento seguroTokens JWT, datos de sesioniOS, Android, macOS
Red / InternetComunicacion con BFFTodas

Dependencias criticas:

PaqueteVersionFuncion
mobile_scanner^3.5.5Escaneo de codigos de barras (ZXing engine)
image_picker^1.0.7Captura de fotos para POD
signature^5.4.1Canvas de firma digital para POD
flutter_appauth^6.0.5Autenticacion OIDC (login con Keycloak / Azure AD)
flutter_secure_storage^10.0.0Almacenamiento seguro de tokens
qr_flutter^4.1.0Generacion de QR para handshake dual
hive / hive_flutter^2.2.3Cola offline para operaciones sin conexion
connectivity_plus^5.0.2Deteccion de estado de red
dio^5.4.0HTTP client con interceptors

1.2 Carrier App

Aplicacion para transportistas. Gestiona entregas pendientes, handshake dual-QR en centros PUDO, drop-off por lotes, recogida de paquetes caducados y escaneo de codigos de barras.

AtributoValor
PlataformasiOS, Android, macOS (solo desarrollo)
Bundle ID iOS/macOScom.example.carrierApp PLACEHOLDER — debe cambiarse
Application ID AndroidNo configurado — requiere build.gradle Android
OIDC redirect URIPor definir (debe coincidir con el application ID final)
Flutter SDK>=3.0.0 <5.0.0
Version actual1.0.0+1

ACCION REQUERIDA: El bundle ID com.example.carrierApp es un placeholder de Flutter. Antes de publicar en tiendas, debe cambiarse a un identificador de produccion (p.ej. com.ontime.proximiti.carrier). Esto afecta a iOS (project.pbxproj, AppInfo.xcconfig), Android (build.gradle, AndroidManifest.xml) y la configuracion OIDC.

Permisos requeridos: identicos a PUDO Manager excepto que no requiere image_picker ni signature (el transportista no captura POD).

Dependencias criticas: mismas que PUDO Manager excepto image_picker y signature que no estan presentes.


2. Versiones Minimas Soportadas

Valores extraidos de la configuracion actual del proyecto.

PlataformaVersion Minima ActualVersion RecomendadaFuenteNotas
iOS (PUDO Manager)14.016.0+Podfileplatform :ios, '14.0'Requerido por flutter_appauth 6.x
iOS (Carrier App)11.016.0+project.pbxprojIPHONEOS_DEPLOYMENT_TARGETDebe subir a 14.0 minimo para paridad con PUDO Manager
AndroidAPI 29 (Android 10)API 33 (Android 13)build.gradleminSdk 29Solo configurado en PUDO Manager; Carrier App pendiente
Android targetAPI 34 (Android 14)API 34+build.gradletargetSdk 34Play Store exige target API reciente
Android compileAPI 36build.gradlecompileSdk 36
macOS10.15 (Catalina)13.0+ (Ventura)Podfileplatform :osx, '10.15'Solo para desarrollo local

ACCION REQUERIDA (Carrier App): El proyecto Android del Carrier App no tiene build.gradle configurado con applicationId, minSdk, targetSdk ni appAuthRedirectScheme. Debe crearse siguiendo el patron de PUDO Manager antes de cualquier build Android.


3. Matriz de Certificacion de Dispositivos

3.1 Dispositivos Operador PUDO

Uso tipico: punto de venta fijo o semi-fijo. El operador recibe paquetes, escanea codigos, captura firmas y fotos. Conectividad WiFi disponible.

RequisitoMinimoRecomendado
Pantalla>= 5.5">= 6.1" o tablet 8-10"
Camara trasera8 MP, autofocus12 MP+
RAM3 GB4 GB+
Almacenamiento libre500 MB1 GB+
ConectividadWiFiWiFi + 4G (backup)

Dispositivos recomendados:

DispositivoPlataformaRango precioNotas
Samsung Galaxy A15 / A25AndroidBajo-MedioPantalla amplia, buena camara
Samsung Galaxy Tab A9AndroidMedioIdeal para punto fijo con tablet
iPhone SE (3ra gen)iOSMedioCompacto, rendimiento alto
iPhone 11 / 12iOSMedioPantalla grande, multitarea
Xiaomi Redmi Note 13AndroidBajoAlternativa economica

3.2 Dispositivos Transportista

Uso tipico: en ruta, condiciones de iluminacion variable, uso intensivo de escaneo de codigos de barras. Resistencia y bateria son prioritarios.

RequisitoMinimoRecomendado
Pantalla>= 5.0">= 5.5"
Camara trasera8 MP, autofocus rapido12 MP+
RAM3 GB4 GB+
Bateria3500 mAh5000 mAh+
ResistenciaIP67 o superior, MIL-STD-810
Conectividad4G4G + WiFi

Dispositivos recomendados:

DispositivoPlataformaRango precioNotas
Samsung Galaxy XCover 6 ProAndroidMedio-AltoRugerizado, boton escaneo dedicado
Samsung Galaxy XCover 7AndroidMedioResistente, bateria extraible
CAT S62 ProAndroidAltoRugerizado extremo, FLIR
iPhone SE (3ra gen)iOSMedioCompacto, resistente al agua IP67
Zebra TC22 / TC27AndroidAltoDispositivo enterprise, escaner integrado

3.3 Escaner de Codigos de Barras

MetodoSoporteNotas
Camara nativaSoportadoVia mobile_scanner (motor ZXing). Metodo principal
Escaner Bluetooth HIDCompatibleEscaners que emulan teclado (HID mode) funcionan con cualquier campo de texto
Zebra DataWedgeRequiere validacionAndroid: DataWedge puede enviar escaneados como intents o keystrokes. Requiere pruebas
Honeywell SW WedgeRequiere validacionSimilar a DataWedge; configurar como keyboard output

Formatos de codigo soportados:

FormatoUso en PROXIMITIEjemplo
Code128Codigo de barras del envioPPRX-20260318-00042
QR CodeHandshake dual transportista-PUDOJSON con shipmentId, nonce, timestamp

4. Cuentas de Tienda

4.1 Apple App Store Connect

ElementoDetalle
Tipo de cuentaOrganization (no Individual) — verificacion D-U-N-S requerida
Coste$99 USD / anual
Apple Developer Team IDProporcionado tras registro
Apps a registrar2: PUDO Manager + Carrier App

Certificados y perfiles necesarios:

Certificado / PerfilProposito
iOS Distribution CertificateFirma del binario para App Store
Provisioning Profile (App Store)Uno por app — vincula cert + bundle ID + capabilities
Push Notification Certificate (p8 key)Solo si se implementan push notifications

Requisitos de la ficha de cada app:

RequisitoDetalle
Screenshots6.7" (iPhone 15 Pro Max) y 5.5" (iPhone 8 Plus) minimo
DescripcionEspanol (principal) + Ingles (recomendado)
Politica de privacidadURL publica obligatoria
CategoriaBusiness o Logistics
Clasificacion por edad4+ (sin contenido restringido)
App Review notesCredenciales de prueba para el reviewer de Apple

TestFlight (beta testing):

PasoDetalle
Internal TestingHasta 100 testers internos (Apple ID del equipo)
External TestingHasta 10.000 testers — requiere Beta App Review
ExpiracionBuilds expiran a los 90 dias

4.2 Google Play Console

ElementoDetalle
Tipo de cuentaOrganization developer account
Coste$25 USD (pago unico)
Apps a registrar2: PUDO Manager + Carrier App
Formato de subidaAAB (Android App Bundle) — requerido por Play Store

Firma de la app:

ElementoDetalle
Play App SigningRecomendado — Google gestiona la clave de firma de distribucion
Upload keyKeystore generado por el equipo de desarrollo para firmar builds
Key aliasUno por app

Requisitos de la ficha:

RequisitoDetalle
ScreenshotsMinimo 2 por tipo de dispositivo (telefono, tablet 7", tablet 10")
DescripcionEspanol (principal) + Ingles (recomendado)
Politica de privacidadURL publica obligatoria
Clasificacion de contenidoCuestionario IARC obligatorio
Target API levelAPI 34+ (requisito Play Store 2026)
Data safety formDeclaracion de datos recopilados (requerida)

Tracks de testing:

TrackTestersReview
Internal TestingHasta 100 — disponible inmediatamenteSin review
Closed Testing (Alpha)Lista de testers por emailReview automatico
Open Testing (Beta)Cualquiera con enlaceReview automatico
ProductionPublicoReview completo

4.3 MDM (Mobile Device Management)

Si Ontime utiliza una solucion MDM (Microsoft Intune, VMware Workspace ONE, MobileIron, etc.), las apps pueden distribuirse sin publicarlas en tiendas publicas.

EscenarioiOSAndroid
Distribucion via MDMApple Business Manager + VPP (Volume Purchase)Managed Google Play (private apps)
Enterprise sideloadNo recomendado — Apple elimino Enterprise Distribution para apps publicasAPK directo via MDM
Managed App Configcom.apple.configuration.managedRestrictionsManager API
Configuracion remotaURL del BFF, OIDC issuer, feature flagsURL del BFF, OIDC issuer, feature flags

DECISION REQUERIDA: Ontime IT debe confirmar si las apps seran publicas (App Store + Play Store), privadas (MDM only), o mixtas (Play Store privado + App Store Connect con distribucion unlisted).


5. Proceso de Firma y Build

5.1 iOS

PasoComando / Accion
PrerequisitoXcode 16+ instalado, certificados en Keychain
Build releaseflutter build ios --release
ArchiveXcode → Product → Archive
UploadXcode Organizer → Distribute App → App Store Connect
TestFlightAutomatico tras upload; esperar procesamiento (~15 min)
App ReviewEnviar para revision desde App Store Connect

Acciones previas al primer build de produccion:

  • [ ] Carrier App: cambiar bundle ID de com.example.carrierApp a produccion
  • [ ] Registrar ambos App IDs en Apple Developer Portal
  • [ ] Crear Distribution Provisioning Profiles
  • [ ] Configurar automatic signing o manual profiles en Xcode
  • [ ] Actualizar OIDC redirect URIs en Azure AD para los bundle IDs finales

5.2 Android

PasoComando / Accion
PrerequisitoJDK 17+, Android SDK, keystore de release
Build AABflutter build appbundle --release
Build APK (MDM)flutter build apk --release
UploadGoogle Play Console → Release → Create release → Upload AAB
Internal TestingDisponible inmediatamente tras upload

Configuracion de firma (release):

properties
# android/key.properties (NO commitear al repositorio)
storePassword=<password>
keyPassword=<password>
keyAlias=<alias>
storeFile=<path-to-keystore.jks>

Acciones previas al primer build de produccion:

  • [ ] Carrier App: crear android/app/build.gradle completo (copiar patron de PUDO Manager)
  • [ ] Generar keystore de release: keytool -genkey -v -keystore release.jks -keyalg RSA -keysize 2048 -validity 10000
  • [ ] Configurar signingConfigs.release en build.gradle (ambas apps)
  • [ ] Habilitar Play App Signing en Google Play Console
  • [ ] ProGuard/R8 habilitado por defecto en release — verificar que no ofusca clases necesarias

6. Notificaciones Push (Roadmap)

Actualmente NO implementado. El servicio ws-pprx-notifications es un stub que simula el envio. Solo existen notificaciones in-app.

Si se requiere push para produccion:

PlataformaServicioConfiguracion
iOSApple Push Notification service (APNs)P8 key (recomendado) o certificado PEM
AndroidFirebase Cloud Messaging (FCM)google-services.json por app
Flutterfirebase_messaging packageAgregar a pubspec.yaml de ambas apps
Backendws-pprx-notificationsIntegrar FCM Admin SDK (Java) para envio

Prerequisitos:

  • Proyecto Firebase creado con ambas apps registradas
  • APNs key (p8) subida a Firebase Console para iOS
  • google-services.json (Android) y GoogleService-Info.plist (iOS) en cada app
  • Token de dispositivo registrado en backend al hacer login
  • Backend: firebase-admin SDK en ws-pprx-notifications

7. Checklist de Distribucion

#ItemPUDO ManagerCarrier AppResponsable
1Bundle ID de produccion definidoListoPendienteOntime + Dev
2Application ID Android definidoListoPendienteOntime + Dev
3Apple Developer Account activa (Organization)Ontime
4Google Play Console activa (Organization)Ontime
5Certificado de distribucion iOS generadoOntime + Dev
6Provisioning Profiles creadosDev
7Keystore Android de release generadoDev
8Play App Signing habilitadoDev
9Politica de privacidad URL publicadaOntime Legal
10Screenshots para App StoreOntime + Dev
11Screenshots para Play StoreOntime + Dev
12Descripcion de app (ES + EN)Ontime
13Clasificacion por edad / contenido completadaOntime
14Data safety form (Play Store) completadaOntime + Dev
15TestFlight configuradoDev
16Internal Testing track (Play Store) configuradoDev
17MDM evaluado (si aplica)Ontime IT
18Push notifications configuradas (si aplica)Ontime + Dev
19OIDC redirect URIs registrados en Azure ADOntime IT
20BFF production URL configurado en las appsOntime IT + Dev
21Carrier App iOS deployment target subido a 14.0N/APendienteDev
22Carrier App Android build.gradle creadoN/APendienteDev
23flutter_secure_storage v10 fix verificado en ambas appsDev
24Pruebas en dispositivos fisicos (minimo 2 iOS + 2 Android)Dev + QA

Ecosistema PUDO de PROXIMITI — documentacion interna