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

Posted by rlecheta on julho 31, 2016
Android, Tutorial

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.

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

  • Boa tarde,

    Segui todos os passos do tutorial, mas ta dando erro 401 “Unauthorized”. Devo fazer alguma configuração extra?
    Pelo Firebase Console consigo enviar a mensagem normalmente.

    • Oi Andre, esse erro acontece ae vc não passou o parametro Authorization ao fazer a request ou se passou uma chave que não é da sua conta.

  • Ricardo, boa tarde.

    Estou ainda tentando entender o que exatamente é o Firebase, estou confuso, pois muitos locais ele fala que propoem explicar informa que é para desenvolver aplicativos de maneira simplificada e rápida.

    Ele veio para substituir o Android Studio? De que maneira que ele se encaixa nisso tudo…

    Tem algum artigo seu explicando o que exatamente é em detalhes?

    Obrigado Abraços

    • Oi Flavio, ele não substitui o Android Studio. Se não o entendeu ainda é melhor seguir com seus estudos de Android. Firebase é mais avançado e ele possui serviços de servidor para enviar mensagens de Push como explicado neste tutorial. Ele também tem analytics e banco de dados no servidor. Enfim, é meio avançado.

  • Ricardo, bom dia.
    Seguindo seus passos consegui enviar as mensagem pelo Postman e pelo console do Firebase. Isso funcionou por um período porém agora não consigo enviar as notificações pelo Postman somente pelo conole do Firebase. Sempre que tento utilizar pelo Postman recebo o erro 500 error:InternalServerError. O que será que aconteceu? Não modifiquei absolutamente nada.

  • Aonde pega o valor da tag “to”

    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”
    }
    }

    • Na 1a parte do tutorial explico isso. Procure pelo método onTokenRefresh() e veja os logs, pois o token (registration id) é impresso.

  • Parabéns pelo tutorial. Cara, estou com uma dúvida. Tem como enviar notificações do app pro endpoint, para o endpoint enviar para um grupo de usuários ou um usuário especifico?

    • neste exemplo foi para um usuario especifico.. pois o “to” no json é o token do device que vc quer enviar.. vc pode passar uma lista de devices tb.. ou estude sobre topicos, pois um topico permite enviar msgs pra quem está registrado nele.

      • ok. Então é possível. Estava olhando o blog do firebase e lá dizia que não conseguiria fazer isso. Mandar do app via código para o servidor.

        • entendi tua pergunta agora.. mandar do app pro server do firebase direto acho q nao da.. mas vc pode mandar do app pra um web service seu.. e esse cara pode fazer o trabalho.

  • Ola. Com o Firebase eu consigo enviar notificações para todas as pessoas que tenham o aplicativo instalado? Por exemplo, tenho um app de um comercio e quero enviar uma imagem de promoção para todos que tenham o app instalado… pelo que li em alguns lugares, parece q ele só envia pra um dispositivo especifico? ou li errado. Obrigado.