Monthly Archives: julho 2016

Enviando mensagens de Push com o Firebase Cloud Messaging (FCM) – parte 2

Posted by rlecheta on julho 31, 2016
Android, Tutorial / 16 Comments

Olá pessoal, na Parte 1 deste tutorial aprendemos a criar um app Android para receber mensagens de Push utilizando o Firebase.

Se você ainda não leu, segue link da 1ª parte.

http://ricardolecheta.com.br/?p=862

Na 2ª parte do Tutorial vamos ver como fazer:

  1. Enviar mensagens de Push pelo web service do Firebase (sem utilizar o console);
  2. Exemplo de como ler mensagens do tipo chave=valor no Android.

Vimos que podemos usar o console do Firebase para enviar as mensagens de Push, mas muita gente tem me perguntado como que faz para enviar a mensagem manualmente no código.

Para enviar uma mensagem de Push, basta postar no web service do Firebase um JSON contendo as informações necessárias.

A figura abaixo mostra o endereço URL do endpoint do web service e os parâmetros que precisam ser enviados:

a

Veja que o endpoint do web service do Firebase é:

https://fcm.googleapis.com/fcm/send

Obs: se você não está acostumado com o termo, “endpoint” refere-se a URL de um web service.

Algo importante da requisição, é que ela deve ser feita via POST, e deve-se enviar no cabeçalho HTTP os parâmetros Content-TypeAuthorization.

O valor parâmetro Authorization é igual a “key=SUA_SERVER_KEY”.

A SERVER_KEY do FCM pode ser encontrada na página do Console, dentro das configurações do seu projeto.

Dentro da página do seu projeto, clique em Configurações conforme indicado na figura e depois no link Project Settings. Então entre na tab Cloud Messaging, onde você verá sua SERVER KEY.

b

No meu caso, o valor do parâmetro Authorization ficou assim:

key=AIzaSyBwaM5NAiGSGoft1gIESiuRaVcQTlxHe8E

Se você é novo em programação, procure sobre como fazer requisições HTTP na linguagem que você está programando, seja PHP, Java, Python, etc.. todas tem uma forma de fazer esta requisição.

Eu gosto de testar web services utilizando o plugin Postman do Chrome, pois é simples e prático. Para brincar vamos fazer um teste rápido 🙂

No Postman, siga os seguintes passos:

1) Configure o modo de envio para POST e digite a URL do endpoint do Firebase: https://fcm.googleapis.com/fcm/send

c

2) Clique em Headers e adicione os cabeçalhos Content-TypeAuthorization

Content-Type = application/json

Authorization = key=AIzaSyBwaM5NAiGSGoft1gIESiuRaVcQTlxHe8E

Lembre-se de colocar a sua SERVER_KEY.

d

3) Clique em Body e selecione a opção raw

Digite o seguinte JSON para enviar uma notificação:

{
 "to" : "Digite o Token (registration id) do dispositivo aqui",
 "notification" : {
 "title" : "Mensagem para o Firebase",
 "body" : "Teste firebase"
 }, 
 "data" : {
 "nome" : "Ricardo",
 "sobrenome" : "Lecheta"
 }
}

A figura a seguir mostra como fiz no Postman. Depois de preencher tudo corretamente, é só clicar no botão Send e pronto! Você verá lá em baixo o JSON de resposta do servidor do Google.

g

Veja que no JSON que enviei, mandei tanto o campo “notification” que possui os dados para mostrar o alerta de notificação no dispositivo (title e body), assim como foi enviado a estrutura “data” com os parâmetros com chave e valor.

Neste caso enviei os seguintes parâmetros:

nome=Ricardo

sobrenome=Lecheta

No código, basta ler estes parâmetros conforme mostra a figura abaixo.

Tinham me perguntado como fazer para ler os dados enviados, então é exatamente desta forma que deve-se fazer 🙂

f

Vale lembrar que o Firebase vai mostrar a notificação somente se o aplicativo estiver em background. Caso ele esteja aberto, você deverá ler a mensagem e mostrar a notificação/alerta manualmente.

É isso pessoal, espero que este tutorial tenha ajudado e qualquer dúvida é só perguntar 🙂 , abs.

Enviando mensagens de Push com o Firebase Cloud Messaging (FCM)

Posted by rlecheta on julho 25, 2016
Android, Tutorial / 44 Comments

Olá pessoal.

Esta é a 1ª parte do Tutorial. A 2ª parte está aqui.

No Google I/O 2016 o Google anunciou o Firebase, uma plataforma completa com diversos serviços comuns a aplicativos móveis como analytics, crash reports, notificações push, dentre outros.

firebase

Muito tem se falado do Firebase nos últimos meses, portanto serei rápido neste post. O mais importante que você precisa saber para seguir este tutorial é que ele deve levar no máximo 10 a 15 minutos, e as mensagens de Push do Firebase são gratuitas 🙂

No livro Google Android 5a ed, explico como enviar mensagens de Push no Android com o GCM (Google Cloud Message).

Capa_AndroidLecheta4ed_FINAL

Porém como o GCM foi migrado para o FCM (Firebase Cloud Messaging), é justo atualizar os leitores do meu livro com as novidades 🙂

Neste rápido tutorial vamos aprender a enviar mensagens de Push com a nova plataforma do Firebase, e o projeto que vamos fazer é baseado na documentação do Firebase, disponível neste link:

Set Up a Firebase Cloud Messaging Client App on Android

No github do Firebase você poderá encontrar diversos exemplos, inclusive o quickstart sobre o FCM. Os códigos deste tutorial, serão baseados neste quickstart.

https://github.com/firebase/quickstart-android/tree/master/messaging

Partiu pro código!

1) Passo 1 – Criar o projeto.

Crie um projeto no Android Studio conforme a figura abaixo. Eu escolhi o template Empty Activity.

Tenha atenção no nome do pacote que você vai escolher para o projeto, pois essa informação será necessária depois para configurar o Firebase.

001

2) Configurar o Firebase no Console.

Acesse a página do console do Firebase com sua conta do Google e clique no botão Create New Project.

https://console.firebase.google.com/

002

Escolha um nome para seu projeto, selecione o Brasil como país e prossiga.

Depois de criar seu projeto, você verá a página de administração do Firebase.

003

O Firebase possui APIs para Android, iOS e Web. Neste tutorial estamos criando um app Android, portanto clique no botão Add Firebase to your Android app para configurar o projeto.

No wizard insira o nome do seu pacote, o SHA1 do seu certificado e clique em Add App.

004

Siga o wizard, e no passo 2 faça o download do arquivo google-services.json conforme indicado na figura. Este arquivo contem as configurações da sua conta do Firebase e deve ficar dentro do módulo app do projeto, conforme indicado na figura.

005

No último passo do wizard, temos as instruções de como configurar o gradle. É só copiar o código e colar no local indicado. Veja que devemos alterar o arquivo build.gradle da raiz do projeto, e depois o arquivo app/build.gradle do módulo app.
006

Depois de fazer estas configurações, edite o arquivo app/build.gradle e adicione a dependência do Firebase no projeto:

 

No Android Studio, adicione a dependência FCM ao arquivo build.gradle de nível do aplicativo:

  • app/build.gradle

dependencies {
compile ‘com.google.firebase:firebase-messaging:9.6.1’
}

Pronto! Agora vamos voltar ao projeto Android.

3) Configuração do projeto Android.

Crie a classe MyFirebaseInstanceIDService conforme o código deste link:

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseInstanceIDService.java

Veja que vamos usar o próprio exemplo de quickstart do Firebase, assim não temos como errar :-).

Nesta classe, o método onTokenRefresh() é chamado quando o aplicativo receber um token (registration id). Como você aprendeu no livro Google Android 5ed, este token representa o identificador do dispositivo e precisa ser enviado ao seu servidor, pois com ele é possível enviar uma mensagem para este dispositivo.

 

@Override
 public void onTokenRefresh() {
 // Get updated InstanceID token.
 String refreshedToken = FirebaseInstanceId.getInstance().getToken();
 Log.d(TAG, "Refreshed token: " + refreshedToken);

// TODO: Implement this method to send any registration to your app's servers.
 sendRegistrationToServer(refreshedToken);
 }

Feito isso, crie a classe MyFirebaseMessagingService. Ela será responsável por receber as mensagens de push e criar notificações para avisar ao usuário.

Novamente, vamos copiar a classe de exemplo do quickstart do Firebase.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseMessagingService.java

O método onMessageReceived(msg) é chamado quando uma notificação de Push é recebida, simples assim 🙂


@Override
 public void onMessageReceived(RemoteMessage remoteMessage) {
 // Faça algo aqui como mostrar uma notificação.
 }

Depois de criar estes 2 serviços  do Firebase, é preciso cadastrá-los no AndroidManifest.xml, conforme mostra a figura abaixo.

b

c

Para ajudar, copie o trecho de código do manifest dos exemplos do Firebase.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/AndroidManifest.xml

Ao rodar o aplicativo você verá a mensagem que o token deste dispositivo foi gerado com sucesso. Funciona mesmo no emulador do Android SDK.


I/FirebaseInitProvider: FirebaseApp initialization successful
07-23 21:04:53.633 16360-16514/br.com.livroandroid.hellofirebasemessaging D/MyFirebaseIIDService: <strong>Refreshed token</strong>: cJmLLI-dIR0:APA91bGtuSyWqc-T7kBx_eeC2ANJbBmyl2v1zlZ74afrRiqyJOC0Y7apmfdcDuuKL0JX2_gDpGW-xzROEQS3qKYRXNTfMOloSYoE8o3dqOJobeXTsLHG4jbSU1lQ5JV2-LEM9jN5B_BI

4) Enviando uma mensagem pelo console do Firebase.

Já temos tudo configurado, e só falta enviarmos uma mensagem para testar o Push. O legal do Firebase é que isso pode ser feito pela sua própria página de console.

No console do Firebase, acesse o menu Notifications e envie uma notificação. Basta preencher o campo Message text e selecionar o aplicativo com o seu pacote no campo Target.

d

Ao enviar uma mensagem com o aplicativo aberto, você verá no LogCat conforme indicado na figura abaixo 🙂

MyFirebaseMsgService: Message Notification Body: Hello Firebase!

e

Agora pressione o botão Home do Android e deixe o aplicativo em background. Neste caso ao enviar a mensagem o Firebase vai mostrar uma notificação automaticamente, conforme este print.

f

Veja que a notificação só foi exibida com o app em background, e este é o comportamento padrão do firebase.

Basicamente, existem 2 tipos de mensagens: data messages (pares de chave=valor) e notification messages.

1) As mensagens do tipo data messages são sempre recebidas no método onMessageReceived(removeMessage), independente se o app está aberto ou em background.

Para identificar se a mensagem é do tipo data message, basta verificar se o método getData() retorna um Map com registros (chave=valor).

if (remoteMessage.getData().size() > 0) {
   Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}

Neste caso o desenvolvedor é sempre responsável por mostrar uma notificação para o usuário, ou seja, é preciso programar para mostrar a notificação. No código de exemplo do firebase tem até um exemplo disso basta descomentar o código.

Para enviar uma mensagem do tipo data message pelo console do Firebase, entre em opções avançadas e preencha a estrutura de chave=valor, é bem simples. Depois no app você poderá ler os valores.

2) As mensagens do tipo notification messages possuem um comportamento um pouco diferente, e foi esta mensagem que enviamos, pois ela não continha nenhum parâmetro do tipo (chave=valor).

Neste tipo de mensagem, se o app está aberto o método onMessageReceived(removeMessage) é executado. Neste caso, o desenvolvedor é responsável por programar a leitura da mensagem e mostrar a notificação para o usuário. Porém, caso o app esteja em background o Firebase vai mostrar uma notificação automaticamente para o usuário. Ao clicar na notificação os dados da mensagem de push serão enviados para a activity principal do aplicativo, então é só fazer o tratamento ao abrir o app e pronto 🙂

Para maiores detalhes sobre os tipos de notificações veja esse link:

https://firebase.google.com/docs/cloud-messaging/concept-options

É isso pessoal 🙂 Espero que este breve tutorial tenha ajudado a entender um pouco sobre como enviar mensagens de Push com o Firebase. Vale lembrar que o Google ainda vai dar suporte para o GCM um bom tempo, até porque existem muitas aplicações que estão utilizando este serviço em produção. Mas para novos apps, recomenda-se utilizar o Firebase.

Uma dica é usar o Firebase também para aplicativos iOS, pois o serviço de Push do Google é bem mais simples que o serviço da APNS (Apple Push Notification Service) da Apple.

Se você gostou, confira a 2ª parte do tutorial aqui.

Abs