Usar a API FCM HTTP v1 com tokens de acesso do OAuth 2

1. Introdução

Em comparação com a API legada do FCM, a API HTTP v1 do FCM oferece um modelo de autorização mais seguro usando tokens de acesso de curta duração. As etapas para gerar o token de acesso da API FCM v1 são significativamente diferentes das etapas da API legada.

Este codelab mostra o processo de configuração do lado do cliente e do servidor para ativar o envio de notificações push a um app Android usando a API HTTP v1 do FCM. Ele destaca a etapa principal da geração de credenciais para a API v1.

Para mais informações, acesse:

Pré-requisitos

  • Conhecimento básico de desenvolvimento para Java e Android

O que você vai aprender

  • Etapas detalhadas da configuração do lado do cliente e do servidor para ativar o envio de notificações push ao seu app Android usando a API HTTP v1 do FCM.
  • Geração de credenciais para a API HTTP v1 usando contas de serviço
  • Enviar mensagens de teste usando a API HTTP v1

Pré-requisitos

Versão estável mais recente do Android Studio

Um dos seguintes dispositivos:

Um ambiente de desenvolvimento Java ou um editor de código de sua escolha

2. Configuração de projetos do Firebase e apps Android

Ao final do codelab, você poderá enviar mensagens para seu app usando o Firebase Cloud Messaging. Antes disso, você precisa criar um projeto do Firebase. Este codelab também oferece um app Android com um exemplo de código para integração com o FCM.

Configuração do projeto do Firebase

Configuração do app Android

O app Android de exemplo fornecido neste codelab já está integrado ao FCM. Depois de iniciar, ele vai se registrar no servidor do FCM e se inscrever em um tópico. Nas etapas posteriores deste codelab, você vai enviar uma mensagem para o tópico, e seu app vai recebê-la.

3. Configurar o servidor de aplicativos

Agora que o app está configurado, baixe um exemplo de código do lado do servidor para enviar mensagens ao app usando a API FCM v1. Esse código carrega as credenciais da API (descritas na próxima seção) para gerar um token de acesso. Em seguida, ele envia uma mensagem para seu app usando o envio de mensagens por tópico do FCM.

  • Importe o código inicial do servidor fazendo o download do projeto do GitHub. O projeto "messaging" é um projeto Java baseado em Gradle com uma dependência do SDK firebase-admin, que oferece funcionalidade para enviar mensagens.

Mais detalhes sobre como um servidor de apps funciona com o FCM podem ser encontrados no documento Seu ambiente de servidor e o FCM.

4. Receber credenciais da v1

A API HTTP v1 do FCM usa tokens de acesso de curta duração de acordo com o modelo de segurança OAuth2. Em comparação com a chave de API estática usada na API legada do FCM, o token de acesso de curta duração é menos propenso ao risco de vazamento de credenciais. Esta seção detalha as etapas para criar uma credencial para gerar o token de acesso usado na chamada da API.

  1. Configure uma conta de serviço do Firebase para permitir que o SDK Admin do Firebase autorize chamadas para as APIs do FCM. Abra Configurações do projeto no Console do Firebase e selecione a guia Contas de serviço. Clique em Gerar nova chave privada para fazer o download do snippet de configuração. Captura de tela cortada destacando o snippet de configuração do SDK Admin do componente "Contas de serviço" da página "Configurações do projeto"
  2. No projeto do GitHub baixado, renomeie o arquivo baixado como service-account.json e copie-o para o caminho messaging/ do projeto.
  3. O método getAccessToken() (mostrado abaixo) na classe Messaging.java gera um token OAuth2 válido por uma hora.
private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials.fromStream(new FileInputStream("service-account.json")).createScoped(Arrays.asList(SCOPES));
  googleCredentials.refresh();
  return googleCredentials.getAccessToken().getTokenValue();
}
  1. Mude o método principal para adicionar a seguinte linha:
public static void main(String[] args) throws IOException {
  System.out.println(getAccessToken());
  ...
}
  1. Acesse o diretório do projeto messaging/ no terminal e digite:
./gradlew run -Pmessage=common-message

para imprimir o token OAuth2.

Para mais informações, consulte Autorizar solicitações de envio.

5. Enviar uma mensagem com a API REST

Agora você pode enviar uma mensagem pela API HTTP v1. Siga as etapas abaixo:

  • Para adicionar o token de acesso a um cabeçalho de solicitação HTTP:
  • Adicione o token como o valor do cabeçalho de autorização no formato Authorization: Bearer <access_token>
  • Faça uma solicitação HTTP para a API v1 do FCM usando curl:
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $OAuth2_token" -H "X-GFE-SSL: yes" -d  "{\"message\": {\"topic\": \"$topic_name\", \"notification\": {\"title\": \"breaking news\", \"body\": \"This is breaking news\"}}}" https://fcm.googleapis.com/v1/projects/[PROJECT_NAME]/messages:send

O $topic_name acima pode ser encontrado no código do app Android mencionado na configuração do projeto do Firebase e do app Android. Por padrão, ele é "weather".

  • Depois que uma mensagem é entregue, uma notificação aparece na tela, semelhante à imagem abaixo:

54ae84ece22202cd.png

6. Conclusão

Parabéns! Você concluiu o codelab para:

  • Configurar um projeto do Firebase
  • Integrar o Firebase a um app Android
  • Criar credenciais para a API HTTP v1 do FCM
  • Enviar uma mensagem para seu app usando a API HTTP v1 do FCM

Para conhecer os recursos avançados oferecidos pelo FCM, consulte as seguintes referências: