La app estaba terminada, instalada y funcionando. Hacías una foto y no pasaba nada. Ni notificación, ni traza, ni error. Silencio.
El servicio estaba vivo y en primer plano. Los permisos, concedidos. La foto, correctamente indexada por el sistema con un identificador más alto que nuestra línea base. El proceso, sin congelar según el propio Android. Ninguna restricción declarada en la configuración de la app.
Cada comprobación descartaba una hipótesis y nos dejaba con menos sitios donde mirar.
Concluimos que el mecanismo de aviso de cambios del sistema estaba silenciado para apps en segundo plano, y construimos una alternativa: un sondeo periódico. Tampoco funcionó.
Entonces hicimos lo que deberíamos haber hecho al principio: añadir un latido. Una traza cada pocos segundos diciendo simplemente «sigo aquí». Y ahí apareció el patrón. El latido se paraba unos treinta segundos después de salir de la app, y no volvía.
No era que no nos llegaran los avisos. Es que no se estaba ejecutando nada. El fabricante congelaba el proceso entero, con su servicio en primer plano y todo, sin matarlo y sin reportarlo por ninguno de los canales que habíamos consultado.
Quitarle a la app las restricciones de batería en los ajustes del sistema. Un interruptor. Con eso funcionó a la primera, y además reveló que nuestro diagnóstico era falso: el mecanismo original nunca había estado roto, y el aviso llegaba en 415 milisegundos.
Un fallo silencioso es peor que uno ruidoso. Si el sistema nos hubiera dicho «he congelado esta app», habríamos tardado cinco minutos. Al no decir nada, gastamos horas construyendo una solución a un problema inexistente.
Instrumenta el camino feliz, no solo los errores. Solo registrábamos trazas cuando detectábamos algo. Por eso no podíamos distinguir «no ha pasado nada» de «estoy muerto», que son dos situaciones con arreglos opuestos.
Y sobre todo: eso le va a pasar a tus usuarios. No es una anécdota de desarrollo. Cualquiera que instale la app en un móvil de esos fabricantes va a vivir exactamente lo mismo, sin trazas y sin saber por qué. Por eso quitar la restricción de batería dejó de ser una nota en el manual y pasó a ser un paso propio del alta, con su estado comprobado por la app: si no está hecho, te lo dice y te lleva allí.