¿Cuáles son los desafíos de ingeniería detrás de la limpieza de las insignias de notificación en iOS?

Puede usar notificaciones push remotas para configurar o borrar la insignia en una aplicación iOS. En general, deberá abordar estos aspectos:

  1. Cada dispositivo en el que se usa la aplicación debe registrarse para recibir notificaciones push de “distintivos” remotas (el sonido y la alerta no son necesarios a menos que los necesite para otros fines),
  2. El token de inserción de la aplicación debe enviarse a su servidor y asociarse con la cuenta de usuario adecuada,
  3. Cuando el recuento de notificaciones cambia a través de la acción del servidor o la acción en un cliente, se debe enviar un envío con el recuento de credenciales actualizado a todos los demás clientes asociados con esa cuenta de usuario.

Mencionas el desafío de escalar las notificaciones. Si bien podría diseñar un sistema para enviar el número de credencial modificado de forma síncrona o en cada evento, sugeriría una tarea programada en el servidor que se ejecuta cada X número de segundos o minutos que empuja el conteo actual de cada usuario que ha cambiado desde el último hito.
Como ejemplo de implementación, una tabla de base de datos podría tener:

  • ID de la cuenta
  • recuento actual
  • última marca de tiempo de notificación
  • marca de tiempo de cambio de último recuento

Escribiría un proceso simple para seleccionar todas las filas donde la marca de tiempo de notificación> cambiar la marca de tiempo, enviar notificaciones a los dispositivos afectados y actualizar las marcas de tiempo de notificación efectuadas. Una cosa a tener en cuenta es que esto puede conducir a condiciones de carrera donde el proceso de notificación tira una fila y antes de establecer la marca de tiempo de cambio se aplica un nuevo recuento. Debe usar un bloqueo exclusivo a nivel de tabla mientras ejecuta el proceso de notificación (que no escalará bien) o generar una sola marca de tiempo al comienzo de la ejecución de la notificación y aplicar esa marca de tiempo almacenada al actualizar la base de datos.

Otra solución sería programar el envío de actualizaciones para X segundos en el futuro y volver a programar el envío pendiente cuando se aplique una nueva actualización a la cuenta. Esto parece más elegante y aislado por cuenta, pero no creo que escale también.

En términos de entrega push sin formato, la cola push puede ser muy, muy rápida si tiene la infraestructura adecuada. Puede considerar usar Urban Airship o algo similar si esto le preocupa.

Es esencialmente un problema de sincronización similar a leer su correo electrónico en varios clientes y esperar que el estado de lectura sea coherente entre ellos. Asume que las API de su cliente tienen una forma de propagar el resultado del cambio de estado de cualquiera de los clientes al servidor, el servidor tiene una forma de actualizar su modelo de estado central para ese usuario y que el servidor puede rastrear todos los puntos finales utilizado por ese usuario, realizando un seguimiento de los puntos finales que se han enviado indicadores anteriores y luego enviando actualizaciones a todos ellos.

Aunque la carga podría ser un problema, se trata más del trabajo pesado requerido para mantener el estado.

More Interesting

¿Puede un ingeniero de software sobrevivir sin usar la recursividad? Siempre tiendo a usar iteración (para o mientras bucle) en lugar de recursión. ¿Puedo obtener siempre usando la iteración en lugar de la recursividad?

¿Cuál es la diferencia entre la ingeniería de construcción y lanzamiento, DevOps y la ingeniería de confiabilidad del sitio?

¿Por qué llamamos ingenieros informáticos a ingenieros de software en lugar de ingenieros informáticos, a diferencia de otros tipos de ingenieros como ingenieros mecánicos, ingenieros eléctricos, etc.?

¿Cuál es la mejor herramienta de revisión de código / diferencia para una pequeña empresa?

Si alguna vez creó un banco en línea, ¿qué necesita hacer diferente en comparación con un sitio web comercial simple?

¿Hay alguna diferencia entre ser un DevOps en una gran empresa y un ingeniero de software en una startup?

¿Cuál es la anatomía de los proyectos de programación donde se usan múltiples lenguajes?

¿Una madre que se queda en casa tiene alguna posibilidad de volver al desarrollo de software?

¿Cuáles son las herramientas de desarrollo web que la mayoría de los desarrolladores utilizan para sus proyectos?

¿Quién ofrece capacitación en pruebas de software en Bangalore?

¿Deberían los ingenieros de software preocuparse en los próximos años de que sus trabajos sean reemplazados por computadoras?

¿Cuáles son los mejores libros para ingenieros de software interesados ​​en trabajar en infraestructura?

¿Qué tan difícil es conseguir un trabajo como ingeniero de software en Silicon Valley? ¿Cómo cambiará esto en 10 años?

¿Qué temas se espera que los estudiantes de CS dominen cuando se gradúen?

¿Qué programa de software debo desarrollar para poder ayudar a la sociedad en general?