Transformando a ti com cloud computing e virtualização
Introdução ao Google Cloud Messaging
1. Introdução ao Google Cloud Messaging
Edilson Mendes Bizerra Junior
edilsonmendes@gmail.com
edilsonmendes.blogspot.com
@edilsonmendess
2. Edilson Mendes
Mestre em Engenharia da Computação pela
Universidade de Pernambuco
Engenheiro de Sistemas do Centro de Estudos
e Sistema Avançados do Recife (C.E.S.A.R)
desde 2005
Professor de Android da Faculdade de
Filosofia Ciências e Letras de Caruaru (FAFICA)
3. Agenda
Motivação
Pulling vs Pushing
Google Cloud Messaging (GCM)
Principais Características
Funcionamento
A requisição e a resposta
GCM na Prática
Habilitando o GCM
Instalando as Helper Libraries
A Aplicação Cliente
A Aplicação Servidora
4. Motivação
Uso de internet nos smartphones cresce a
cada dia
5. Considerando uma aplicação cliente
(android)/servidor (aplicação web qualquer)
Exemplos: Sistema de notícias,
placar de futebol, divulgação de Como manter
propagandas, avisos em geral,
os dados do
etc.
cliente sempre
atualizados?
E se quisermos
enviar uma
mensagem
para
algum(uns)
cliente(s)?
7. Pulling
Simples de
Implementar
Aparelho consulta
de tempos e
tempos o servidor
a fim de obter
dados atualizados
8. Mas...
Conexão Wifi e
3G drenam
sua bateria
em poucas
horas
A
autonomia
da bateria dos
smartphones
não é boa
9. Só para se ter uma idéia...
Fazer requisições a cada 5
minutos pode consumir
aproximadamente 10% da
sua bateria por dia
Pode parecer pouco,
mas é um absurdo
para uma única
aplicação
14. Tráfico no lado do servidor
Cada dispositivo, a
cada n minutos
bombardeando o
Servidor
15. Pushing
O servidor
notifica o cliente
quando tiver
novos dados
Apenas usa rede
(e bateria)
quando
Como implementar? necessário
• SMS?
• Conexão permanente?
• Google Cloud Messaging?
16. SMS
Pode ser muito caro
Poucos serviços de envio de SMS de graça
Simples de implementar Muito deles possuem algum tipo de
É muito fácil interceptar limitação (quantidade de mensagens ou
um SMS no Android localização)
Lembre-se, pessoas de todo o mundo
podem baixar sua aplicação do Google
Play
Necessidade de contratar um serviço pago
de envio de SMS
Informações em
“tempo-real”
17. Conexão Permanente
Difícil de implementar
(no cliente e servidor)
O ideal era que essa
Algumas preocupações:
responsabilidade não identificar e diferenciar os
fosse da aplicação aparelhos, entrega de
Exemplo: Banco de Dados mensagem, e se o aparelho
estiver desligado?
18. Google Cloud Messaging (GCM) for Android é um serviço
gratuito que ajuda os desenvolvedores a enviar dados
de aplicativos no servidor para aplicações
Android.
O GCM trata todos os aspectos de fila e entrega
de mensagens
19. Principais características
Dois tipos de mensagens:
Send-to-Sync ou GCM não garante a ordem
Mensagens com payload e entrega da mensagem
(limite de 4kb)
Um aplicativo Android não GCM não faz tratamento
precisa estar em execução nos dados ou fornece
para receber mensagens inteface gráfica
20. Principais características
Requer Android 2.2+ com o
Usa a mesma conexão dos Google Play Store, ou um
serviços do Google (Gmail, emulador com Android
Contatos, etc). 2.2+ com Google APIs.
É necessária uma conta do
Google no dispositivo se o Continuação do Cloud to
Android for inferior ao Device Messaging (C2DM)
4.0.4.
23. Credenciais
https://android.googleapis.com/gcm/send
Google Cloud Messaging
GCM
Project Number
Registration ID API Key
Android Application Server Application
24. Registro da Aplicação Android
Google Cloud Messaging
GCM
t
jec r ID
Pro be ion
m t
Nu gistra
Re
Android Application Server Application
Registration ID
25. Envio de Dados
Google Cloud Messaging HT
AP T P
Da I Ke Post
(ht dos y + con
Re t e
GCM
ap tps:/ g I ndo
is. /an Ds
co dro +
m Re m/
gc id.g
age sp
os m/
M ens ta se oogl
nd e
)
Android Application Server Application
Busca novos dados
26. A Requisição
Para enviar uma mensagem o servidor deve realizar
uma requisição HTTP POST para
https://android.googleapis.com/gcm/send.
Duas formas de criar a requisição e a resposta:
Plain Text (limitado, não suporta multicast
message)
JSON
27. Formato da Requisição (JSON)
A requisição necessita dos seguintes cabeçalhos HTTP
Authorization: key=YOUR_API_KEY
Content-Type: application/json
O corpo HTTP deve conter uma string representando
um objeto JSON com os seguintes campos:
registration_ids, data, collapse_key, etc
29. Array de Strings com os registration IDs dos dispositivos (pelo
menos 1 e no máximo 1000) que receberão a mensagem
{
"collapse_key": "score_update",
"time_to_live": 108,
"delay_while_idle": true,
"data": {
"score": "4x8",
"time": "15:16.2342"
},
"registration_ids":["4", "8", "15", "16", "23", "42"]
}
30. Descarta mensagens sobre o mesmo tema, armazenadas
enquanto o dispositivo estava offline, enviando apenas a mais
recente
O GCM permite no máximo 4 collapse keys ao mesmo tempo
{
"collapse_key": "score_update",
"time_to_live": 108,
"delay_while_idle": true,
"data": {
"score": "4x8",
"time": "15:16.2342"
},
"registration_ids":["4", "8", "15", "16", "23", "42"]
}
31. Objeto JSON cujos campos são os pares chave-valor com dados
da mensagem.
Não há limite para o número de pares chave-valor (o tamanho
total da mensagem < 4kb)
{
"collapse_key": "score_update",
"time_to_live": 108,
"delay_while_idle": true,
"data": {
"score": "4x8",
"time": "15:16.2342"
},
"registration_ids":["4", "8", "15", "16", "23", "42"]
}
32. Tempo (padrão são 4 semanas), em segundos, que a mensagem é mantida
no GCM enquanto o dispositivo está offline
Limite de 100 mensagens, após isso as mensagens armazenadas são
descartadas e quando o dispositivo estiver online recebe uma mensagem
especial informando o número de mensagens descartadas
{
"collapse_key": "score_update",
"time_to_live": 108,
"delay_while_idle": true,
"data": {
"score": "4x8",
"time": "15:16.2342"
},
"registration_ids":["4", "8", "15", "16", "23", "42"]
}
33. Se definido para true (padrão é false), indica que a mensagem
não deve ser enviada imediatamente se o dispositivo está em
idle.
{
"collapse_key": "score_update",
"time_to_live": 108,
"delay_while_idle": true,
"data": {
"score": "4x8",
"time": "15:16.2342"
},
"registration_ids":["4", "8", "15", "16", "23", "42"]
}
36. Habilitando o GCM
1. Acessar o Google APIs Console
(https://code.google.com/apis/console) e criar um novo
projeto.
2. No primeiro acesso aparecerá a página acima, clique em
Create Project...
37. Habilitando o GCM
4. Sua URL irá mudar para algo como:
https://code.google.com/apis/console/#project:4815162342
5. Em seguida, clique em Services no painel esquerdo e
habilite o Google Cloud Messaging for Android.
38. Gerando a API Key
1. Acesse API Access e clique em Create new Server Key... Ou
Create new Browser key... para gerar a API key. A API key
é usada para fazer requisições ao servidor GCM
39. Instalando as Helper Libraries
1. Abra o SDK Manager e na se instale o Google Cloud
Messaging for Android Library na seção Extras
2. Após a instalação, serão criados os arquivos gcm-client/dist
/gcm.jar e gcm-server/dist/gcm-server.jar dentro da pasta
YOUR_SDK_ROOT/extras/google/gcm
40. A Aplicação Cliente (AndroidManifest.xml)
<permission android:name="my_app_package.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission
android:name="my_app_package.permission.C2D_MESSAGE" />
<!-- App receives GCM messages. -->
<uses-permission
android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received.
-->
<uses-permission android:name="android.permission.WAKE_LOCK" />