cloud 2 device message framework - androidrec
DESCRIPTION
Palestra tutorial sobre C2DM (Cloud 2 Device Message) apresentada na AndroidRec 2012.TRANSCRIPT
C2DMCloud 2 Device Message
Neto MarinGlobalcode
@netomarin
http://blog.netomarin.com
Neto Marin• Trabalhando com mobilidade
desde 2006 e fuçando com Android desde 2008.
• Fundador da lista AndroidBrasil-dev com mais de mil participantes.
• Coordenador das trilhas de mobilidade do TDC.
• Autor da Academia Android da Globalcode.
O que é o C2DM ?
• É um serviço que ajuda os desenvolvedores enviar dados dos seus servidor para os dispositivos desejados.
• O serviço é uma ferramenta leve e que pode ser utilizado para informar a aplicação móvel para contactar o servidor, receber uma atualização ou dados do usuário.
• Esse serviço trata todos os aspectos da fila das mensagens e a entrega aos dispositivos finais.
C2DMpasso a passo
Habilitar C2DM
Tratar o registro
Enviar mensagem(servidor)
Tratar mensagem
Registrar o device
• Na primeira vez que a aplicação precisar usar o C2DM, deve ser disparada uma Intent de registro para com.google.android.c2dm.intent.REGISTER que deve conter:
• Sender ID: conta autorizada a enviar mensagens para a aplicação. Normalmente é o endereço de e-mail configurado pelo desenvolvedor.
• Application ID: Id da aplicação que deseja receber as mensagens.
Antes de começar...
Para poder usar o serviço é primeiro preciso se registrar:
https://developers.google.com/android/c2dm/signup
Configurando Manifest
• Registrar permissão de registrar e receber mensagens:
• com.google.android.c2dm.permission.RECEIVE
• Permissão de Internet (!!!)
• Prevenir que outras aplicações leiam as mensagens da sua app:
• applicationPackage + “.permission.C2D_MESSAGE
• Receivers para a Intent de Receive adicionada acima.
Código Registro C2DM
Intent registrationIntent = new Intent(” com.google.android.c2dm.intent.REGISTER");registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));registrationIntent.putExtra("sender", emailOfSender);startService(registrationIntent);
Retorno do Registro• É preciso definir um receiver para tratar o retorno do
registro, para a Intent com.google.android.c2dm.intent.REGISTRATION.
• Caso haja algum erro, um dos códigos será retornado:
• SERVICE_NOT_AVAILABLE
• ACCOUNT_MISSING
• AUTHENTICATION_FAILED
• TOO_MANY_REGISTRATIONS
• INVALID_SENDER
• PHONE_REGISTRATION_ERROR
Removendo Registro
Intent unregIntent = new Intent(” com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));startService(unregIntent);
Servidor de Push
• Utilização de um servidor próprio.
• Deve armazenar ou receber o Registration ID do device para realizar o envio.
• Irá chamar o servidor do Google, e esse terminará o envio da mensagem.
• Instagram publicou o próprio servidor, feito em Noje.js
• https://github.com/Instagram/node2dm
Autenticação no Google
• O servidor também precisa se autenticar com o Google, usando a conta fornecida no cadastro.
• Via linha de comando:curl https://www.google.com/accounts/ClientLogin -d
Email=your_user -d "Passwd=your_password"
-d accountType=GOOGLE
-d source=Google-cURL-Example -d service=ac2dm
Envio de Mensagem
• A mensagem que se deseja enviar deve ser repassada ao Google, que se encarregará da questão de filas e envios.
• Via linha de comando:curl --header
"Authorization: GoogleLogin auth=AUTHENTICATION_ID"
"https://android.apis.google.com/c2dm/send"
-d registration_id=your_registration
-d "data.payload=MENSAGEM" -d collapse_key=0
Recebendo Mensagem
• Após registrar a Intent de recebimento, com.google.android.c2dm.intent.RECEIVE, implementar o receiver.
• O dado enviado estará na String extra payload.
Referências
• Android Cloud to Device Messaging Framework• https://developers.google.com/android/c2dm/
• Android Cloud to Device Messaging (C2DM) - Tutorial• http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/
article.html
Obrigado!@netomarin