Google Cloud Messaging
Aviso
O Google preteriu o GCM em 10 de abril de 2018. Os documentos e os projetos de exemplo a seguir podem não ser mais mantidos. O servidor GCM do Google e as APIs de cliente serão removidos assim que 29 de maio de 2019. O Google recomenda migrar aplicativos GCM para o Firebase Cloud Messaging (FCM). Para obter mais informações sobre a substituição e a migração do GCM, consulte Google Deprecated Cloud Messaging.
Para começar a usar o Firebase Cloud Messaging com o Xamarin, consulte Firebase Cloud Messaging.
O Google Cloud Messaging (GCM) é um serviço que facilita o sistema de mensagens entre aplicativos móveis e aplicativos de servidor. Este artigo fornece uma visão geral de como o GCM funciona e explica como configurar o Google Services para que seu aplicativo possa usar o GCM.
Este tópico fornece uma visão geral de alto nível de como o Google Cloud Messaging roteia mensagens entre seu aplicativo e um servidor de aplicativos e fornece um procedimento passo a passo para adquirir credenciais para que seu aplicativo possa usar serviços GCM.
Visão geral
O Google Cloud Messaging (GCM) é um serviço que lida com o envio, roteamento e enfileiramento de mensagens entre aplicativos de servidor e aplicativos cliente móveis. Um aplicativo cliente é um aplicativo habilitado para GCM que é executado em um dispositivo. O servidor de aplicativos (fornecido por você ou sua empresa) é o servidor habilitado para GCM com o qual seu aplicativo cliente se comunica por meio do GCM:
Usando o GCM, os servidores de aplicativos podem enviar mensagens para um único dispositivo, um grupo de dispositivos ou vários dispositivos inscritos em um tópico. Seu aplicativo cliente pode usar o GCM para assinar mensagens downstream de um servidor de aplicativos (por exemplo, para receber notificações remotas). Além disso, o GCM possibilita que os aplicativos cliente enviem upstream mensagens de volta para o servidor de aplicativos.
Google Cloud Messaging em ação
Quando as mensagens downstream são enviadas de um servidor de aplicativos para um aplicativo cliente, o servidor de aplicativos envia a mensagem para um servidor de conexão GCM; O servidor de conexão GCM, por sua vez, encaminha a mensagem para um dispositivo que está executando seu aplicativo cliente. As mensagens podem ser enviadas por HTTP ou XMPP (Protocolo extensível de mensagens e presença). Como os aplicativos cliente nem sempre estão conectados ou em execução, o servidor de conexão GCM enfileira e armazena mensagens, enviando-as para aplicativos cliente à medida que se reconectam e ficam disponíveis. Da mesma forma, o GCM enfileirará mensagens upstream do aplicativo cliente para o servidor de aplicativos se o servidor de aplicativos não estiver disponível.
O GCM usa as seguintes credenciais para identificar o servidor de aplicativos e seu aplicativo cliente e usa essas credenciais para autorizar transações de mensagens por meio do GCM:
Chave de API – a chave de API fornece ao servidor de aplicativos acesso aos serviços do Google; O GCM usa essa chave para autenticar o servidor de aplicativos. Antes de usar o serviço GCM, primeiro você deve obter uma chave de API do Console do Desenvolvedor do Google criando um projeto. A chave de API deve ser mantida segura; para obter mais informações sobre como proteger sua chave de API, consulte Práticas recomendadas para usar chaves de API com segurança.
ID do remetente – a ID do remetente autoriza o servidor de aplicativos para seu aplicativo cliente – é um número exclusivo que identifica o servidor de aplicativos que tem permissão para enviar mensagens ao seu aplicativo cliente. A ID do remetente também é o número do projeto; você obtém a ID do remetente do Console de Desenvolvedores do Google ao registrar seu projeto.
Token de Registro – o Token de Registro é a identidade do GCM do aplicativo cliente em um determinado dispositivo. O token de registro é gerado em tempo de execução – seu aplicativo recebe um token de registro quando é registrado pela primeira vez no GCM durante a execução em um dispositivo. O token de registro autoriza uma instância do aplicativo cliente (em execução nesse dispositivo específico) a receber mensagens do GCM.
ID do aplicativo – a identidade do aplicativo cliente (independente de qualquer dispositivo específico) que se registra para receber mensagens do GCM. No Android, a ID do aplicativo é o nome do pacote registrado no AndroidManifest.xml, como
com.xamarin.gcmexample
.
Configurar o Google Cloud Messaging (posteriormente neste guia) fornece instruções detalhadas para criar um projeto e gerar essas credenciais.
As seções a seguir explicam como essas credenciais são usadas quando os aplicativos cliente se comunicam com servidores de aplicativos por meio do GCM.
Registro com GCM
Um aplicativo cliente instalado em um dispositivo deve primeiro registrar-se no GCM antes que o sistema de mensagens possa ocorrer. O aplicativo cliente deve concluir as etapas de registro mostradas no diagrama a seguir:
O aplicativo cliente entra em contato com o GCM para obter um token de registro, passando a ID do remetente para o GCM.
O GCM retorna um token de registro para o aplicativo cliente.
O aplicativo cliente encaminha o token de registro para o servidor de aplicativos.
O servidor de aplicativos armazena em cache o token de registro para comunicações subsequentes com o aplicativo cliente. Opcionalmente, o servidor de aplicativos pode enviar uma confirmação de volta para o aplicativo cliente para indicar que o token de registro foi recebido. Depois que esse handshake ocorrer, o aplicativo cliente poderá receber mensagens (ou enviar mensagens para) o servidor de aplicativos.
Quando o aplicativo cliente não quiser mais receber mensagens do servidor de aplicativos, ele poderá enviar uma solicitação ao servidor de aplicativos para excluir o token de registro. Se o aplicativo cliente estiver recebendo mensagens de tópico (explicado posteriormente neste artigo), ele poderá cancelar a assinatura do tópico. Se o aplicativo cliente for desinstalado de um dispositivo, o GCM detectará isso e notificará automaticamente o servidor de aplicativos para excluir o token de registro.
Mensagens downstream
Quando o servidor de aplicativos envia uma mensagem downstream para o aplicativo cliente, ele segue as etapas ilustradas no diagrama a seguir:
O servidor de aplicativos envia a mensagem para o GCM.
Se o dispositivo cliente não estiver disponível, o servidor GCM armazenará a mensagem em uma fila para transmissão posterior.
Quando o dispositivo cliente está disponível, o GCM envia a mensagem para o aplicativo cliente nesse dispositivo.
O aplicativo cliente recebe a mensagem do GCM e a manipula adequadamente. Por exemplo, se a mensagem for uma notificação remota, ela será apresentada ao usuário.
Nesse cenário de mensagens (em que o servidor de aplicativos envia uma mensagem para um único aplicativo cliente), as mensagens podem ter até 4kB de comprimento.
Para obter informações detalhadas (incluindo exemplos de código) sobre como receber mensagens GCM downstream no Android, consulte Notificações remotas.
Mensagens de Tópico
O Topic Messaging é um tipo de mensagens downstream em que o servidor de aplicativos envia uma única mensagem para vários dispositivos de aplicativo cliente que assinam um tópico (como uma previsão do tempo). As mensagens de tópico podem ter até 2 KB de comprimento e o sistema de mensagens de tópico dá suporte a até um milhão de assinaturas por aplicativo. Se o GCM estiver sendo usado apenas para mensagens de tópico, o aplicativo cliente não precisará enviar um token de registro para o servidor de aplicativos.
Mensagens de Grupo
Mensagens de Grupo é um tipo de mensagens downstream em que o servidor de aplicativos envia uma única mensagem para vários dispositivos de aplicativo cliente que pertencem a um grupo (por exemplo, um grupo de dispositivos que pertencem a um único usuário). As mensagens de grupo podem ter até 2 KB de comprimento para dispositivos iOS e até 4 KB de comprimento para dispositivos Android. Um grupo é limitado a um máximo de 20 membros.
Mensagens upstream
Se o aplicativo cliente se conectar a um servidor que dá suporte ao XMPP, ele poderá enviar mensagens de volta para o servidor de aplicativos, conforme ilustrado no diagrama a seguir:
O aplicativo cliente envia uma mensagem para o servidor de conexão XMPP do GCM.
Se o servidor de aplicativos estiver desconectado, o servidor GCM armazenará a mensagem em uma fila para encaminhamento posterior.
Quando o servidor de aplicativos é conectado novamente, o GCM encaminha a mensagem para o servidor de aplicativos.
O servidor de aplicativos analisa a mensagem para verificar a identidade do aplicativo cliente e, em seguida, envia uma "confirmação" ao GCM para confirmar o recebimento da mensagem.
O servidor de aplicativos processa a mensagem.
As Mensagens Upstream do Google explicam como estruturar mensagens codificadas em JSON e enviá-las para servidores de aplicativos que executam o Servidor de Conexão de Nuvem baseado em XMPP do Google.
Configurando o Google Cloud Messaging
Antes de usar os serviços do GCM em seu aplicativo, primeiro você deve adquirir credenciais para acesso aos servidores GCM do Google. As seções a seguir descrevem as etapas necessárias para concluir esse processo:
Habilitar o Google Services para seu aplicativo
Entre no Console de Desenvolvedores do Google com sua conta do Google (ou seja, seu endereço do Gmail) e crie um novo projeto. Se você tiver um projeto existente, escolha o projeto que deseja habilitar para GCM. No exemplo a seguir, um novo projeto chamado XamarinGCM é criado:
Em seguida, insira o nome do pacote para seu aplicativo (neste exemplo, o nome do pacote é com.xamarin.gcmexample) e clique em Continuar para Escolher e configurar serviços:
Observe que esse nome de pacote também é a ID do aplicativo para seu aplicativo.
A seção Escolher e configurar serviços lista os serviços do Google que você pode adicionar ao seu aplicativo. Clique em Mensagens na Nuvem:
Em seguida, clique em HABILITAR MENSAGENS DO GOOGLE CLOUD:
Uma chave de API do Servidor e uma ID do Remetente são geradas para seu aplicativo. Registre esses valores e clique em FECHAR:
Proteja a chave de API – ela não se destina ao uso público. Se a chave de API estiver comprometida, servidores não autorizados poderão publicar mensagens em aplicativos cliente. As práticas recomendadas para usar chaves de API com segurança fornecem diretrizes úteis para proteger sua Chave de API.
Exibir as configurações do projeto
Você pode exibir as configurações do projeto a qualquer momento entrando no Console do Google Cloud e selecionando seu projeto. Por exemplo, você pode exibir a ID do Remetente selecionando seu projeto no menu pull down na parte superior da página (neste exemplo, o projeto é chamado de XamarinGCM). A ID do Remetente é o número do projeto, conforme mostrado nesta captura de tela (a ID do remetente aqui é 9349932736):
Para exibir a chave de API, clique em Gerenciador de API e clique em Credenciais:
Para leitura adicional
Resumo
Este artigo forneceu uma visão geral do GCM (Google Cloud Messaging). Ele explicou as várias credenciais usadas para identificar e autorizar mensagens entre servidores de aplicativos e aplicativos cliente. Ele ilustrava os cenários de mensagens mais comuns e detalhava as etapas para registrar seu aplicativo no GCM para usar serviços GCM.