Ir para o console

Enviar sua primeira mensagem a um app em segundo plano

Para dar os primeiros passos com o FCM, crie o caso de uso mais simples: o envio de uma mensagem de notificação para o dispositivo de um usuário específico quando o app está em segundo plano. Nesta página estão listadas todas as etapas, desde a configuração até a verificação. Se você configurou um app do cliente JavaScript para o FCM, pode ser que já tenha concluído algumas das etapas mostradas.

Configurar o SDK

Adicione o Firebase ao seu projeto do JavaScript, caso ainda não tenha feito isso.

Solicitar permissão para receber notificações

O método Notification.requestPermission() da API Web Notifications exibe uma caixa de diálogo de consentimento para que os usuários permitam que o app receba notificações no navegador. Se a permissão for negada, as solicitações de token de registro do FCM resultarão em erro.

Notification.requestPermission().then(function(permission) {
  if (permission === 'granted') {
    console.log('Notification permission granted.');
    // TODO(developer): Retrieve an Instance ID token for use with FCM.
    // ...
  } else {
    console.log('Unable to get permission to notify.');
  }
});

Acessar o token de registro

Esta seção descreve como recuperar o token de registro de uma instância de app e como monitorar os eventos de atualização dele. Como o token pode passar por um rodízio após a primeira inicialização, recomendamos que você recupere o token de registro mais atualizado.

O token de registro pode mudar quando:

  • o app da Web exclui o token de registro;
  • o usuário exclui dados do navegador. Nesse caso, chame getToken para recuperar o novo token.

Recuperar o token de registro atual

Quando você precisar recuperar o token atual, chame getToken. Esse método retorna nulo quando nenhuma permissão foi concedida. Caso contrário, ele retorna um token ou rejeita a promessa por causa de um erro.

O serviço de mensagens requer um arquivo firebase-messaging-sw.js. A menos que você já tenha um arquivo firebase-messaging-sw.js, crie um arquivo vazio com esse nome e coloque-o na raiz do seu domínio antes de recuperar um token. Você pode adicionar conteúdo significativo ao arquivo posteriormente no processo de configuração do cliente.

Para recuperar o token atual:

// Get Instance ID token. Initially this makes a network call, once retrieved
// subsequent calls to getToken will return from cache.
messaging.getToken().then(function(currentToken) {
  if (currentToken) {
    sendTokenToServer(currentToken);
    updateUIForPushEnabled(currentToken);
  } else {
    // Show permission request.
    console.log('No Instance ID token available. Request permission to generate one.');
    // Show permission UI.
    updateUIForPushPermissionRequired();
    setTokenSentToServer(false);
  }
}).catch(function(err) {
  console.log('An error occurred while retrieving token. ', err);
  showToken('Error retrieving Instance ID token. ', err);
  setTokenSentToServer(false);
});

Monitorar a atualização de token

O retorno de chamada de onTokenRefresh é acionado sempre que um novo token é gerado. Portanto, chamar getToken nesse contexto garantirá o acesso a um token de registro atual e disponível.

// Callback fired if Instance ID token is updated.
messaging.onTokenRefresh(function() {
  messaging.getToken().then(function(refreshedToken) {
    console.log('Token refreshed.');
    // Indicate that the new Instance ID token has not yet been sent to the
    // app server.
    setTokenSentToServer(false);
    // Send Instance ID token to app server.
    sendTokenToServer(refreshedToken);
    // ...
  }).catch(function(err) {
    console.log('Unable to retrieve refreshed token ', err);
    showToken('Unable to retrieve refreshed token ', err);
  });
});

Depois de receber o token, envie-o para o servidor do app e armazene-o usando seu método preferido. Use a API de servidor Instance ID para receber informações sobre inscrições.

Enviar uma mensagem de notificação

Para enviar a um único dispositivo específico, transmita o token de registro do dispositivo, conforme mostrado. Consulte as informações de configuração do cliente da sua plataforma para saber mais sobre esses tokens.

Node.js

// This registration token comes from the client FCM SDKs.
var registrationToken = 'YOUR_REGISTRATION_TOKEN';

var message = {
  data: {
    score: '850',
    time: '2:45'
  },
  token: registrationToken
};

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Java

// This registration token comes from the client FCM SDKs.
String registrationToken = "YOUR_REGISTRATION_TOKEN";

// See documentation on defining a message payload.
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .setToken(registrationToken)
    .build();

// Send a message to the device corresponding to the provided
// registration token.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

Python

# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'

# See documentation on defining a message payload.
message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    token=registration_token,
)

# Send a message to the device corresponding to the provided
# registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Go

// Obtain a messaging.Client from the App.
ctx := context.Background()
client, err := app.Messaging(ctx)
if err != nil {
	log.Fatalf("error getting Messaging client: %v\n", err)
}

// This registration token comes from the client FCM SDKs.
registrationToken := "YOUR_REGISTRATION_TOKEN"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Token: registrationToken,
}

// Send a message to the device corresponding to the provided
// registration token.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

C#

// This registration token comes from the client FCM SDKs.
var registrationToken = "YOUR_REGISTRATION_TOKEN";

// See documentation on defining a message payload.
var message = new Message()
{
    Data = new Dictionary<string, string>()
    {
        { "score", "850" },
        { "time", "2:45" },
    },
    Token = registrationToken,
};

// Send a message to the device corresponding to the provided
// registration token.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);

REST

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
  "message":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : {
      "body" : "This is an FCM notification message!",
      "title" : "FCM Message",
      }
   }
}

Comando cURL:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
  "notification": {
    "title": "FCM Message",
    "body": "This is an FCM Message",
  },
  "token": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
  }
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

Se tiver sucesso, cada método de envio retorna um código de mensagem. O SDK Admin do Firebase retorna a string de código no formato projects/{project_id}/messages/{message_id}. A resposta do protocolo HTTP é uma única chave JSON:

    {
      "name": "projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
    }

Adicionar propriedades de push da Web a um payload de notificação

Com a API HTTP v1, é possível especificar opções de notificação adicionais como um objeto JSON contendo quaisquer propriedades válidas da API Web Notification. Os campos title e body deste objeto, se presentes, modificam os campos google.firebase.fcm.v1.Notification.title e google.firebase.fcm.v1.Notification.body equivalentes.

Solicitação HTTP POST

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...PbJ_uNasm

{
  "message": {
    "token" : <token of destination app>,
    "notification": {
      "title": "FCM Message",
      "body": "This is a message from FCM"
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      },
      "notification": {
        "body": "This is a message from FCM to web",
        "requireInteraction": "true",
        "badge": "/badge-icon.png"
      }
    }
  }
}

Com esta solicitação, os clientes da Web segmentados (incluindo navegadores compatíveis executados no Android) recebem uma mensagem de notificação de alta prioridade que permanece ativa até que o usuário interaja com ela. Ela contém os campos a seguir:

  • Title: FCM Message
  • Body: This is a message from FCM to web
  • RequireInteraction: true
  • Badge: /badge-icon.png

Os aplicativos nativos para Android e iOS (aos quais as modificações da Web não se aplicam) recebem uma mensagem de notificação de prioridade normal com os itens a seguir:

  • Title: FCM Message
  • Body: This is a message from FCM

No momento, RequireInteraction tem compatibilidade parcial entre os navegadores. Os desenvolvedores precisam conferir a especificação da API Web Notification para verificar a compatibilidade com o navegador e a plataforma.

cURL

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...PbJ_uNasm" -H "Content-Type: application/json" -d '{
  "message": {
    "notification": {
      "title": "FCM Message",
      "body": "This is a message from FCM"
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      },
      "notification": {
        "body": "This is a message from FCM to web",
        "requireInteraction": "true",
        "badge": "/badge-icon.png"
      }
    }
  },
  "token": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
  }
}' "https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send"

Resposta HTTP

{
    "name": "projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c98"
}

Consulte Criar solicitações de envio do servidor de apps para saber mais sobre mensagens do FCM.

Próximas etapas

Enviar mensagem aos apps em primeiro plano

Depois de enviar com êxito mensagens de notificação enquanto o app está em segundo plano, consulte Receber mensagens em um cliente JavaScript para dar os primeiros passos no envio de apps em primeiro plano.

Ir além das mensagens de notificação

Para ir além das notificações e adicionar outros comportamentos mais avançados ao seu app, consulte os seguintes artigos: