¿Cómo un dispositivo iOS (iPad o iPhone) recibe notificaciones "push"?

3

Un dispositivo iOS (iPad o iPhone) recibe notificaciones, incluso cuando el dispositivo está inactivo. Apple llama a estas "notificaciones push" .

¿Cómo recibe el dispositivo estas notificaciones? ¿Hay acciones periódicas (recurrentes) involucradas? Si es así, ¿qué acciones son y con qué frecuencia ocurren?

    
pregunta Nicolas Barbulesco 20.03.2016 - 09:54

2 respuestas

5

De la Documentación del Servicio de notificaciones push de Apple:

  

Cada dispositivo establece una conexión IP acreditada y encriptada   con APN y recibe notificaciones a través de esta conexión persistente.

Esto significa que utiliza algún tipo de conexión persistente basada en socket. Podría ser su propio protocolo propietario, o WebSocket , etc. Las "acciones periódicas" que está preguntando generalmente se implementan en estos protocolos, al nivel más bajo posible, utilizando sockets TCP / IP y están siendo constantemente encuestados en busca de nuevos datos en el socket . Cuando se termina de leer los datos del socket, se dispara un evento para realizar alguna acción, como mostrar una notificación en el dispositivo.

Para explicar con más detalle, la forma en que funcionan los sockets es que su dispositivo se conecte a un servidor remoto, el servidor remoto envía datos a su dispositivo y se coloca en el búfer del socket, luego su dispositivo lee el búfer del socket y hace algo con el datos. En el momento en que los datos se transfieran a su dispositivo, su dispositivo los procesará. Esto se debe a que su dispositivo está buscando nuevos datos en el búfer del socket todo el tiempo . Intenta leer datos, y si obtiene datos, los envía para procesarlos y luego intenta leerlos nuevamente; si alguna vez no obtiene datos, simplemente intenta leerlos nuevamente, para siempre. Si la conexión con el servidor remoto se desconecta alguna vez, simplemente intenta conectarse de nuevo hasta que tenga éxito.

La documentación del código que vinculé anteriormente se toma de biblioteca ASIO de Boost que Es ampliamente utilizado para sockets en C ++. Su implementación y uso se pueden simplificar de la siguiente manera:

01 start program
02 try to connect to server by using a socket
03 if not connected to server, goto 02
04 try to read data on socket
05 if data was read, process data
06 goto 03

En el paso 03 anterior, el dispositivo sabe cuándo está desconectado y no intentará conectarse nuevamente hasta que vuelva a estar en línea (el dispositivo envía un evento cuando se conecta a Internet, por lo que todo ocurrirá al instante).

Cuando no se leyó ningún dato en el paso 04 anterior, inmediatamente intenta leerlo nuevamente sin esperar (asumiendo que todavía está conectado al servidor). Se necesita una cantidad muy pequeña de potencia de procesamiento para intentar leer los datos en el zócalo repetidamente, por lo que no hay que preocuparse por la batería o los recursos desperdiciados (consulte La respuesta de @ malhal aquí para una mejor explicación de esto y también cómo funciona cuando el dispositivo está durmiendo).

    
respondido por el Andrew Larsson 20.03.2016 - 20:05
2

Sí, la CPU del dispositivo está inactiva, pero el módem celular tiene otra CPU llamada procesador de banda base que se sigue ejecutando, supervisa los paquetes entrantes que coinciden con un filtro determinado y luego activan la CPU con una interrupción y le permite procesar la entrada. datos. Este es un truco tomado del empuje directo de Pocket PC de Microsoft, que fue una mejora en la implementación de Blackberry que requería la infraestructura de BB del lado de la compañía.

    
respondido por el malhal 05.12.2016 - 18:37

Lea otras preguntas en las etiquetas