Como a tecnologia de notificação por push funciona no Android?

218

Como o Google implementou o recurso de notificação por push? Ele funciona através de pesquisas realizadas por um serviço em execução em segundo plano ou de uma maneira diferente?

Khawar Raza
fonte
24
Parece uma pergunta real para mim. Fiquei me perguntando a resposta e o Google me trouxe aqui. Mais uma vez, outra questão de qualidade foi encerrada.
Tino Mclaren
1
Eu também quero saber disso e estava planejando escrever uma pergunta, mas já existe uma, então é definitivamente uma boa pergunta.
Igor Čordaš

Respostas:

170

Pelo que ouvi durante uma conferência de desenvolvedores do Android em Israel:

Há simplesmente um soquete TCP aguardando no modo de aceitação em um servidor do Google na nuvem. A conexão TCP foi iniciada pelo aplicativo Google Play. É por isso que o Google Play deve estar instalado no dispositivo para que o Google Cloud Messaging (GCM) (anteriormente Serviço de mensagens na nuvem para dispositivos do Android - C2DM ) funcione.

Quando esse soquete do cliente TCP recebe alguma mensagem, a mensagem contém informações como o nome do pacote do aplicativo ao qual ele deve ser endereçado e, é claro - os próprios dados. Esses dados são analisados ​​e compactados em uma intenção que é transmitida e, eventualmente, recebida pelo aplicativo.

O soquete TCP permanece aberto mesmo quando o estado do rádio do dispositivo se transforma no modo "inativo". Os aplicativos não precisam estar em execução para receber as intenções.

Mais informações em http://developer.android.com/google/gcm/gcm.html

Tal Kanel
fonte
1
Mas acho que funciona no emulador também. O que me vem à cabeça é que o dispositivo mantém o servidor atualizado com seu caminho atual (IP). Quando o servidor do Google precisa enviar uma notificação, ele segue seu caminho atual e encaminha a mensagem para esse caminho. Estou certo até certo ponto?
Khawar Raza
2
@ Khawar Raza: quando o IP do dispositivo mudou por algum motivo, o dispositivo se desconecta do servidor. quando isso acontece - a nova conexão é montada, com base no novo IP do dispositivo.
Tal Kanel
1
@ Khawar Raza: o emulador funciona mesmo sem o google play. Eu acho que iniciar esta tomada construído em internamente, em vez de jogar google
Tal Kanel
2
Entendo. Isso seria bastante interessante, na verdade, eu me pergunto se isso é verdade.
you786
2
Por isso, ainda está em votação, mas o lado bom é que a pesquisa é centralizada pelo Google Play.
Accollativo
143

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 Google Cloud Messaging (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.

Tomou isto de: Source Também veja aqui .

Aniket Thakur
fonte
1
Apenas um comentário sobre a conexão GCM. Essa conexão única é uma conexão de Polling.
Wmac
1
A parte crucial para mim foi que um servidor de terceiros, por exemplo, um servidor de e-mail realmente envia uma mensagem de notificação aos servidores do Google GCM. É um serviço que o Google oferece gratuitamente e qualquer terceiro deve implementar um canal de comunicação com os servidores do Google usando seu protocolo GCN. A propósito, o protocolo é basicamente uma resposta HTTP formatada em JSON. Consulte developers.google.com/cloud-messaging para obter informações detalhadas.
Kyselejsyreček
10

Você pode implementar a notificação por push no android com uma conexão tcp de polling longa. Mas isso envolveria a manutenção de um soquete extra => consumo de bateria. Ou você pode abrir uma conexão em intervalos regulares usando o Gerenciador de alarmes.

O Google provavelmente abre um soquete para todas as notificações push do C2DM, portanto, é mais eficiente em termos de bateria.

Shreesh
fonte
então está confirmado que o cliente está pesquisando ao longo de uma conexão tcp, certo? você sabe com que frequência ele pesquisa dados? é a cada 5 segundos, por exemplo. ou é rápido como um batimento cardíaco?
J2emanue # 10/19
3

Em 10 de abril de 2018, o Google substituiu o GCM. As APIs do servidor e do cliente GCM foram descontinuadas e serão removidas a partir de 11 de abril de 2019. Migrar aplicativos do GCM para o Firebase Cloud Messaging (FCM), que herda a infraestrutura GCM confiável e escalável, além de muitos novos recursos.

https://firebase.google.com/docs/cloud-messaging/

user1767754
fonte
1

Sim, você está certo. O Google tinha um serviço (GTalk Service) e este serviço solicitou aos servidores do Google em alguns períodos de tempo.

Yury
fonte
Eu não sei. Acabei de ler como o C2DM estava funcionando. Agora algo pode mudar.
Yury
-3

Nos dispositivos Android, quando você recebe notificações por push, a imagem do aplicativo remetente e uma mensagem aparecem na barra de status. Exatamente quando o cliente toca na notificação, ele pousa no aplicativo.

Robert Manus
fonte
é uma conexão TCP de longa duração em segundo plano, isso não está explicado na resposta,
siga