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 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 orienta você pelo processo de configuração do cliente e do servidor para ativar o envio de notificações push para um app Android usando a API HTTP v1 do FCM. Ele destaca a etapa principal da geração de credenciais para a API v1.

Confira mais informações em:

Pré-requisitos

  • Conhecimento básico de desenvolvimento Java e Android

O que você vai aprender

  • Etapas detalhadas de configuração do cliente e do servidor para ativar o envio de notificações push para o app Android usando a API HTTP v1 do FCM
  • 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 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. Este codelab também fornece 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 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, você precisa fazer 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.

Confira mais detalhes sobre como um servidor de apps deve funcionar com o FCM no documento Seu ambiente de servidor e o 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 salvo, 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. 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 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 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 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 uma mensagem for entregue, uma notificação vai aparecer 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 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: