Como funcionam as notificações por push?

25

Gostaria de saber como o sistema de notificações por push está funcionando?

Existe uma conexão TCP / IP ativa que é executada em segundo plano nos servidores do Google?

opc0de
fonte
11
Veja Wikipedia - que reconhecidamente é um pouco difícil de ler. Basicamente, e coloque em palavras fáceis: o cliente se conecta ao servidor e pede para ser informado - e a resposta vem "atrasada" quando as informações estão disponíveis (ou nunca, se não houver), que são seguidas por um novo pedido. Portanto, sim, isso requer uma conexão TCP / IP permanente em segundo plano mordiscando sua bateria.
Izzy
@ Izz que não pode estar certo, porque (1) os documentos dizem que um Intent é criado quando a mensagem chega e (2) o que rodar no Android pode manter uma conexão aberta que o Android nunca pode matar?
Michael
@ Michael Que documentos? Não sou programador do Android para entender a profundidade (e este não é um quadro de discussão), então provavelmente não posso discutir com você aqui. Ouvi dizer que os ouvintes (para transmissões) podem ser estabelecidos dinamicamente - mas nunca ouvi isso sobre intenções (IMHO, elas devem ser declaradas no Manifest). Eu poderia imaginar algum serviço do Google fazendo o "trabalho real", e o aplicativo simplesmente registrando um "receptor". Acima descrição era mais "geral", não Android-específico, e eu tentei mantê-lo simples;)
Izzy

Respostas:

25

Sim, o Android mantém uma conexão ativa com os servidores do Google, mas não usa muita energia ou dados, porque nenhum tráfego é enviado até que algo envie uma mensagem do GCM para um aplicativo no seu telefone. Há apenas uma conexão no telefone, usada por todos os aplicativos: a instalação de um novo aplicativo que usa o GCM não adiciona carga extra.

A primeira etapa no GCM é que um servidor de terceiros (como um servidor de email) envia uma solicitação ao servidor GCM do Google. Este servidor envia a mensagem para o seu dispositivo através dessa conexão aberta. O sistema Android examina a mensagem para determinar para qual aplicativo ele é e inicia o aplicativo. O aplicativo deve ter se registrado no Android para usar o GCM e deve ter a permissão relevante. Quando o aplicativo é iniciado, ele pode criar uma notificação imediatamente com os dados da mensagem. As mensagens do GCM são muito limitadas em tamanho; portanto, o aplicativo pode abrir uma conexão normal com o servidor de terceiros para obter mais informações (por exemplo, baixar os cabeçalhos de novos emails).

A vantagem do uso de notificações por push é que os aplicativos não precisam ser executados em intervalos regulares para verificar novos dados, economizando energia e dados. A vantagem de ter um mecanismo centralizado como o GCM é que o dispositivo precisa apenas de uma conexão de rede aberta e o sistema GCM do Android é a única coisa que precisa continuar sendo executada, em vez de cada aplicativo ter que permanecer em execução em segundo plano para manter sua própria rede conexão com seu próprio servidor.

Dan Hulme
fonte
Eu acrescentaria apenas um comentário: as mensagens do GCM podem ter tamanho de 4KByte, portanto, não são tão limitadas. developer.android.com/google/gcm/gcm.html
Moszi
O que está mantendo essa conexão aberta? Qualquer atividade ou serviço Android pode ser eliminado a qualquer momento.
Michael
11
Obrigado pela informação. De acordo com a minha pergunta , você sabe qual é o URL de um soquete aberto? (URL da conexão do dispositivo para os servidores GCM abertos e usados ​​para dados de notificação)
Sabeti
6

O sistema operacional Android agora está usando o GCM (Google Cloud Messaging) para o Push Notification WS. Você pode ter uma idéia melhor aqui ; ele fornecerá uma Visão geral da arquitetura sobre o serviço de notificação por push completo com seu ciclo de vida.

Espero que ajude.

Bhavesh
fonte
Existe uma maneira de fazer uma coisa semelhante sem ter que confiar nos servidores do Google?
Michael
@ Michael Usando os serviços Amazon Cloud? Eles parecem ter um conceito comparável. Mas para o "como fazer", este é o lugar errado;)
Izzy
1

Resposta tardia à pergunta antiga, mas vale a pena colocá-la.

O GCM foi descontinuado em abril de 2018 e o Google recomendou o uso do FCM, que é semelhante ao GCM.

  1. não precisamos escrever nossa própria lógica de registro ou nova tentativa de assinatura
  2. Você pode usar o Firebase Notifications, uma solução de notificações sem servidor com um console da web que permite que qualquer pessoa envie notificações para atingir públicos-alvo específicos com base nas informações do Firebase Analytics.
  3. Possui a infraestrutura principal do GCM.
  4. Uma única mensagem pode transferir uma carga útil de até 4KB para um aplicativo cliente.
Ajay Deepak
fonte
11
Da perspectiva do aplicativo, o FCM não é semelhante ao GCM, é idêntico. FCM é apenas o novo nome do GCM.
Robert