¿Realmente se empujan las notifications impulsadas a los teléfonos mobilees?

Sé que las notifications se pueden enviar a los serveres usando http / s, pero ¿pueden los teléfonos mobilees realmente ser empujados desde esos serveres? Técnicamente, creo que los dispositivos mobilees sondean los serveres de notifications para ver si hay notifications nuevas y si se trata de una especie de 'pseudo push'.

Entonces esa es mi pregunta: ¿los teléfonos mobilees realmente reciben notifications en vivo, empujadas o son realmente encuestas? La razón por la que pregunto es que parecería ser increíblemente costoso en la networking para teléfonos mobilees tener un canal constantemente abierto a mástiles mientras un usuario se mueve. ¿Alguien sabe cuáles son los detalles técnicos?

    Las notifications Apple Push se entregan al dispositivo a través de una connection TCP. El dispositivo iOS inicia una connection TCP en el puerto 5223 (con un retorno a 443 en WiFi si no se puede alcanzar el 5223).

    Una vez que se establece la session TCP, se requiere muy poco tráfico para mantener viva la connection TCP, solo un package ocasional de mantenimiento.

    Cuando se envía una notificación push, los serveres Apple buscan una connection existente con el dispositivo. Si se encuentra una connection, entonces el flujo de datos se envía a través de la connection ya establecida, por lo que en ese sentido es un "empuje".

    Si no hay connection existente con el dispositivo de destino, el post se mantiene en el server de Apple hasta que el dispositivo se conecta (o el post expira), por lo que en este nivel es más como un "pull" – con el dispositivo iniciando la connection cuando puede.

    Me imagino que GCM funciona de manera similar.

    Simplemente hay un socket TCP esperando en el modo de aceptación en un server de Google en la nube. La connection de TCP fue iniciada por la aplicación Goggle Play. Es por eso que Google Play debe estar instalado en el dispositivo para que Google Cloud Messaging (GCM) (anteriormente Android Cloud to Device Messaging Service – C2DM) funcione.

    Cuando este socket del cliente TCP recibe algún post, el post contiene información como el nombre del package de la aplicación a la que debe dirigirse y, por supuesto, los datos en sí. Estos datos se analizan y se empaquetan en un bash que se transmite y finalmente recibe la aplicación.

    El zócalo TCP permanece abierto incluso cuando el estado del radio del dispositivo se convierte en modo "inactivo". No es necesario que las aplicaciones se ejecuten para recibir las intenciones.

    Más información en http://developer.android.com/google/gcm/gcm.html