Introdução ao Google Cloud MessagingEdilson Mendes Bizerra Junioredilsonmendes@gmail.comedilsonmendes.blogspot.com@edilson...
Edilson Mendes Mestre em Engenharia da Computação pela Universidade de Pernambuco Engenheiro de Sistemas do Centro de Estu...
Agenda Motivação Pulling vs Pushing Google Cloud Messaging (GCM)     Principais Características     Funcionamento     A re...
Motivação   Uso de internet nos smartphones cresce a                    cada dia
Considerando uma aplicação cliente(android)/servidor (aplicação web qualquer)Exemplos: Sistema de notícias,  placar de fut...
Existem duas técnicasbásicas que podemos  utilizar: Pulling e        Pushing
Pulling          Simples de          Implementar          Aparelho consulta          de tempos e          tempos o servido...
Mas...Conexão Wifi e3G drenamsua bateriaem poucashorasAautonomiada bateria dossmartphonesnão é boa
Só para se ter uma idéia...                      Fazer requisições a cada 5                      minutos pode consumir    ...
Além disso...Não sabemosse teremosnovasinformações,tentamoscegamente
Atraso Notificação usando pulling sempre terá um atraso
Aumentar oudiminuir otempo entre asrequisições?                 Caímos então no                 problema Eficiência X     ...
Com o pullingconsumimosmais dadosOs planos de dados noBrasil são caros e nãoprestam!
Tráfico no lado do servidorCada dispositivo, acada n minutosbombardeando oServidor
Pushing                              O servidor                              notifica o cliente                           ...
SMS                            Pode ser muito caro                             Poucos serviços de envio de SMS de graçaSim...
Conexão Permanente                          Difícil de implementar                           (no cliente e servidor)O idea...
Google Cloud Messaging (GCM) for Android é um serviço gratuito que ajuda os desenvolvedores a enviar dados de aplicativos ...
Principais características Dois tipos de mensagens: Send-to-Sync ou             GCM não garante a ordem Mensagens com payl...
Principais características                              Requer Android 2.2+ com o Usa a mesma conexão dos      Google Play...
FuncionamentoAndroid Application       Google Cloud Messaging        Server Application                      1          GC...
A aplicação Android, GCM eaplicação servidora precisam seconhecer entre si
Credenciais              https://android.googleapis.com/gcm/send                       Google Cloud Messaging             ...
Registro da Aplicação Android                       Google Cloud Messaging                              GCM           t   ...
Envio de Dados                        Google Cloud Messaging         HT                                                   ...
A Requisição Para enviar uma mensagem o servidor deve realizar uma requisição HTTP POST para https://android.googleapis.co...
Formato da Requisição (JSON) A requisição necessita dos seguintes cabeçalhos HTTP    Authorization: key=YOUR_API_KEY    Co...
ExemploContent-Type:application/jsonAuthorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA{"registration_ids" : ["APA91...
Array de Strings com os registration IDs dos dispositivos (pelo    menos 1 e no máximo 1000) que receberão a mensagem{    ...
Descarta mensagens sobre o mesmo tema, armazenadas    enquanto o dispositivo estava offline, enviando apenas a mais    rec...
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-...
Tempo (padrão são 4 semanas), em segundos, que a mensagem é mantida    no GCM enquanto o dispositivo está offline    Limit...
Se definido para true (padrão é false), indica que a mensagem    não deve ser enviada imediatamente se o dispositivo está ...
A Resposta{    "multicast_id": 216,    "success": 3,    "failure": 3,    "canonical_ids": 1,    "results": [        { "mes...
GCM na prática
Habilitando o GCM 1. Acessar o Google APIs Console    (https://code.google.com/apis/console) e criar um novo    projeto. 2...
Habilitando o GCM 4. Sua URL irá mudar para algo como: https://code.google.com/apis/console/#project:4815162342 5. Em segu...
Gerando a API Key 1.   Acesse API Access e clique em Create new Server Key... Ou      Create new Browser key... para gerar...
Instalando as Helper Libraries 1. Abra o SDK Manager e na se instale o Google Cloud    Messaging for Android Library na se...
A Aplicação Cliente (AndroidManifest.xml) <permission android:name="my_app_package.permission.C2D_MESSAGE" android:protect...
A Aplicação Cliente (AndroidManifest.xml)<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver"android:permi...
A Aplicação Cliente (GCMIntentService )import com.google.android.gcm.GCMBaseIntentService;public class GCMIntentService ex...
A Aplicação Cliente (Activity) import com.google.android.gcm.GCMRegistrar; final String regId = GCMRegistrar.getRegistrati...
A Aplicação Servidora (Envio)import com.google.android.gcm.server.*;List<String> devices = new ArrayList<String>();devices...
A Aplicação Servidora (Resposta)MulticastResult multicastResult = sender.send(message, devices, 1);multicastResult.getCano...
Dúvidas
Referências • http://developer.android.com/guide/google/g   cm/index.html • http://www.androidhive.info/2012/10/androi   d...
Obrigado!!!Edilson Mendes Bizerra Junioredilsonmendes@gmail.comedilsonmendes.blogspot.com@edilsonmendess
Próximos SlideShares
Carregando em…5
×

Google Cloud Messaging for Android

5.054 visualizações

Publicada em

0 comentários
10 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
5.054
No SlideShare
0
A partir de incorporações
0
Número de incorporações
437
Ações
Compartilhamentos
0
Downloads
126
Comentários
0
Gostaram
10
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Google Cloud Messaging for Android

  1. 1. Introdução ao Google Cloud MessagingEdilson Mendes Bizerra Junioredilsonmendes@gmail.comedilsonmendes.blogspot.com@edilsonmendess
  2. 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. 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. 4. Motivação Uso de internet nos smartphones cresce a cada dia
  5. 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)?
  6. 6. Existem duas técnicasbásicas que podemos utilizar: Pulling e Pushing
  7. 7. Pulling Simples de Implementar Aparelho consulta de tempos e tempos o servidor a fim de obter dados atualizados
  8. 8. Mas...Conexão Wifi e3G drenamsua bateriaem poucashorasAautonomiada bateria dossmartphonesnão é boa
  9. 9. Só para se ter uma idéia... Fazer requisições a cada 5 minutos pode consumir aproximadamente 10% da sua bateria por diaPode parecer pouco,mas é um absurdopara uma únicaaplicação
  10. 10. Além disso...Não sabemosse teremosnovasinformações,tentamoscegamente
  11. 11. Atraso Notificação usando pulling sempre terá um atraso
  12. 12. Aumentar oudiminuir otempo entre asrequisições? Caímos então no problema Eficiência X Dados Sincronizados
  13. 13. Com o pullingconsumimosmais dadosOs planos de dados noBrasil são caros e nãoprestam!
  14. 14. Tráfico no lado do servidorCada dispositivo, acada n minutosbombardeando oServidor
  15. 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. 16. SMS Pode ser muito caro Poucos serviços de envio de SMS de graçaSimples 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 SMSInformações em “tempo-real”
  17. 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 deExemplo: Banco de Dados mensagem, e se o aparelho estiver desligado?
  18. 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 entregade mensagens
  19. 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. 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.
  21. 21. FuncionamentoAndroid Application Google Cloud Messaging Server Application 1 GCM 2 3 4 5 6 GCM
  22. 22. A aplicação Android, GCM eaplicação servidora precisam seconhecer entre si
  23. 23. Credenciais https://android.googleapis.com/gcm/send Google Cloud Messaging GCM Project Number Registration ID API Key Android Application Server Application
  24. 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. 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. 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. 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
  28. 28. ExemploContent-Type:application/jsonAuthorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA{"registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],"data": { "score": "5x1", "time": "15:10" },}
  29. 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. 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. 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. 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. 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"]}
  34. 34. A Resposta{ "multicast_id": 216, "success": 3, "failure": 3, "canonical_ids": 1, "results": [ { "message_id": "1:0408" }, { "error": "Unavailable" }, { "error": "InvalidRegistration" }, { "message_id": "1:1516" }, { "message_id": "1:2342", "registration_id": "32" }, { "error": "NotRegistered"} ]}
  35. 35. GCM na prática
  36. 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. 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. 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. 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. 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" />
  41. 41. A Aplicação Cliente (AndroidManifest.xml)<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver"android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <actionandroid:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="my_app_package" /> </intent-filter></receiver><service android:name=".GCMIntentService" />
  42. 42. A Aplicação Cliente (GCMIntentService )import com.google.android.gcm.GCMBaseIntentService;public class GCMIntentService extends GCMBaseIntentService { private static final String PROJECT_ID = "337954533874"; public GCMIntentService() { Adicionar no classpath super(PROJECT_ID); SDK_ROOT/extras/google/gcm/ } gcm-client/dist/gcm.jar protected void onRegistered(Context ctx, String regId) {} protected void onUnregistered(Context ctx, String regId) {} protected void onMessage(Context ctx, Intent intent) { String score = intent.getStringExtra("score"); } protected void onDeletedMessages(Context ctx, int total) {} public void onError(Context ctx, String errorId) {} protected boolean onRecoverableError(Context ctx, String errorId) {}}
  43. 43. A Aplicação Cliente (Activity) import com.google.android.gcm.GCMRegistrar; final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { GCMRegistrar.register(this, PROJECT_ID); } else { Log.v(TAG, "Already registered"); }
  44. 44. A Aplicação Servidora (Envio)import com.google.android.gcm.server.*;List<String> devices = new ArrayList<String>();devices.add("4");// ...devices.add("43"); Adicionar no classpath (SDK_ROOT/extras/googleSender sender = new Sender(API_KEY); /gcm) gcm-Message message = new Message.Builder() server/dist/gcm- server.jar.collapseKey("score_update") e.timeToLive(108).delayWhileIdle(true) gcm-.addData("score", "4x8") server/lib/json_simple-.addData("time", "15:16.2342") 1.1.jar.build();MulticastResult result = sender.send(message, devices, 1);
  45. 45. A Aplicação Servidora (Resposta)MulticastResult multicastResult = sender.send(message, devices, 1);multicastResult.getCanonicalIds();multicastResult.getFailure();multicastResult.getSuccess();multicastResult.getMulticastId();multicastResult.getTotal();for (Result result : multicastResult.getResults()) { if (result.getMessageId() != null) { String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // same device has more than on registration ID: update // database } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { // application has been removed from device - unregister // database } }}
  46. 46. Dúvidas
  47. 47. Referências • http://developer.android.com/guide/google/g cm/index.html • http://www.androidhive.info/2012/10/androi d-push-notifications-using-google-cloud- messaging-gcm-php-and-mysql/ • http://www.slideshare.net/johannilsson/foss- sthlm-android-cloud-to-device-messaging
  48. 48. Obrigado!!!Edilson Mendes Bizerra Junioredilsonmendes@gmail.comedilsonmendes.blogspot.com@edilsonmendess

×