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

1. Introdução

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

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

Confira mais informações em:

Pré-requisitos

  • Noções básicas de desenvolvimento em Java e Android

O que você vai aprender

  • Etapas detalhadas da configuração no lado do cliente e do servidor para ativar o envio de notificações push para seu app Android usando a API FCM HTTP v1
  • Geração de credenciais para a API HTTP v1 usando contas de serviço
  • Como enviar mensagens de teste pela 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 do projeto do Firebase e do app Android

Ao final do codelab, você poderá enviar mensagens para seu app usando o Firebase Cloud Messaging. Antes de fazer isso, você precisará criar um projeto do Firebase. Esse 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 iniciado, ele será registrado no servidor do FCM e será inscrito em um tópico. Nas próximas etapas deste codelab, você enviará uma mensagem para o tópico e seu app a receberá.

3. Configurar o servidor de apps

Agora que o app está configurado, faça o download de 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 as mensagens de tópico do FCM.

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

Veja mais detalhes sobre como um servidor do app funciona com o FCM no documento Seu ambiente de servidor e FCM.

4. Receber credenciais da v1

A API FCM HTTP v1 usa tokens de acesso de curta duração de acordo com o modelo de segurança OAuth2. Comparado à chave de API estática usada na API legada do FCM, o token de acesso de curta duração é menos suscetível 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 APIs do FCM. Abra as 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. Uma 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 transferido por download, renomeie o arquivo salvo 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. Altere 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 de mensagens/ projeto no seu terminal e digite:
./gradlew run -Pmessage=common-message

para imprimir o token OAuth2.

Confira mais informações em Autorizar solicitações de envio.

5. Enviar uma mensagem com a API REST

Agora você já pode enviar uma mensagem usando a 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 FCM v1 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 no projeto do Firebase e na configuração do app Android. Por padrão, ele é "weather".

  • Depois que a mensagem for entregue, uma notificação vai aparecer na tela, parecida com a 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 FCM HTTP v1
  • Enviar uma mensagem para seu app usando a API FCM HTTP v1

Para explorar os recursos avançados que o FCM oferece, as seguintes referências são úteis: