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?
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?
Respostas:
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
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.
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.
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.
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.