The FCM JavaScript API lets you receive notification messages in web apps running in browsers that provide service worker support. This includes the following browsers:
- Chrome: 50+
- Firefox: 44+
- Opera Mobile: 37+
Send messages to JavaScript clients using the HTTP and XMPP app server protocols, as described in Send Messages. Sending messages from the Notifications Console is not supported.
To get started with the FCM JavaScript API, you'll need to add Firebase to your web app and add logic to access registration tokens.
Add Firebase to your JavaScript project
If you haven't already, add Firebase to your JavaScript project.
Configure the browser to receive messages
You'll need to add a web app manifest
that specifies the
gcm_sender_id, a hard-coded value indicating that FCM is authorized to send
messages to this app. If your app already has a
manifest.json configuration file, make sure to add
the browser sender ID exactly as shown (do not change the value):
{
"//": "Some browsers will use this to enable push notifications.",
"//": "It is the same for all projects, this is not your project's sender ID",
"gcm_sender_id": "103953800507"
}
Retrieve a messaging object
// Retrieve Firebase Messaging object. const messaging = firebase.messaging();
Request permission to receive notifications
The method messaging.requestPermission() displays a consent dialog to let
users grant your app
permission to receive notifications in the browser. If permission is denied,
FCM registration token requests result in an error.
messaging.requestPermission()
.then(function() {
console.log('Notification permission granted.');
// TODO(developer): Retrieve an Instance ID token for use with FCM.
// ...
})
.catch(function(err) {
console.log('Unable to get permission to notify.', err);
});
Access the registration token
This section describes how to retrieve the registration token for an app instance, and how to monitor token refresh events. Because the token could be rotated after initial startup, you should monitor token refresh and always retrieve the latest updated registration token.
The registration token may change when:
- The web app deletes the registration token.
- The user clears browser data. In this case, call
getTokento retrieve the new token.
Retrieve the current registration token
When you need to retrieve the current token, call
getToken.
This method returns null when permission has not been granted. Otherwise, it
returns a token or rejects the promise due to an error.
// 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);
});
}
Monitor token refresh
The onTokenRefreshcallback fires whenever a new token is
generated, so calling
getToken in its context ensures that you are accessing a current,
available registration token.
// 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);
});
});
After you've obtained the token, send it to your app server and store it using your preferred method. You can use the Instance ID server API to get information about subscriptions
Next steps
After you have completed the setup steps, here are few options for moving forward with FCM for Web (JavaScript):
- Add functionality to your app to receive messages.
- Review a complete sample on GitHub.
- Review the JavaScript reference.
- View a video walkthrough of implementing the API.

