Implement a push notification to an Android smartphone using Firebase. This Android tutorial guides you step by step how to integrate an Android app with Firebase push notification
This post covers how to send Firebase push notification using Android and Firebase cloud messaging. In the past, we were used to sending push notification in Android using Google Cloud messaging service. Nowadays, it is necessary to use a new way to send push data using Firebase cloud messaging. Even if the basic principles remain the same Firebase introduced some interesting new features. Moreover, Firebase supports other services like:
- Authentication
- Remote config
- Crash reporting
This post will cover step by step how to send push notification from Firebase console to an app.
What is Firebase push notification?
Before digging into the details of how to send Firebase push notification in Android using Firebase cloud messaging, it is useful to clarify what is push notification. For example, through push notification, our app can notify a user of new events. This happens even if the Android app is not working in the foreground. Using this service, we can send data from our server to our app whenever a new event occurs. This paradigm is much more efficient respect to keep on connecting to the server (pull method) to ask if there are new events.
Using Firebase push notification in Android, we can keep the user informed about events without draining the smartphone battery. When a user receives the notification, it appears, as a customized icon, in the status bar. There are different paradigms to use when sending an Android notification:
- Message to a single device
- Message to a topic (send the same message to the multiple devices subscribed to a specific topic. This implements the model publisher/subscribers)
- Message to a group (multiple devices that share the same key used to identify a smartphone)
If you are eager to test the Android app, you can use the link below to download the Android app source code:
The video below shows how the app works when receiving an Android notification:
Set up Firebase cloud messaging project in Firebase console
It is time to start! Create an account to access to Firebase console and define a project:

and then:

Once you have created your project, you have to add the package name of your app. Be aware of using the same package name in Android Studio and in the Firebase console:

At the end of this process, your project is configured on Firebase and you are ready to develop your Android Firebase app. In the end, you get a json file that you have to copy at the app module level.
Want to go have more information about Firebase and IoT?
How to send notification in IoT to an Android device
How to implement push notification in Android using Firebase
Now we can develop the Android app integrated with Firebase. As a first step, we have to add Firebase to our app and modify gradle files.
At the project level let’s modify gradle fille as shown below:
[xml] buildscript {repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:<latest version>’
classpath ‘com.google.gms:google-services:<latest version>’
}
}[/xml]
and at the module level:
[xml] ….dependencies {
…..
compile ‘com.android.support:appcompat-v7:<latest version>’
compile ‘com.google.firebase:firebase-messaging:<latest version>’
}
apply plugin: ‘com.google.gms.google-services'[/xml]
In this case, we added messaging dependency. Once the gradle files are configured, the next step is creating our app. In the MainActivity
we add a Button to get the current token
. This token is important because we use it in the Firebase console, to set the right destination device.
Let us suppose, we have already defined the layout containing the button, in the Activity class:
[java] Button btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String tkn = FirebaseInstanceId.getInstance().getInstanceId();
Toast.makeText(MainActivity.this, "Current token ["+tkn+"]",
Toast.LENGTH_LONG).show();
Log.d("App", "Token ["+tkn+"]");
}
});
}[/java]
Notice we used FirebaseInstanceId singleton to the get the current instance and then the current token. It may take a while before the token is generated, so you could get a null value at the beginning.
Moreover, we can monitor the token creation process and get notified when it is available using a custom service that extends FirebaseInstanceIdService. In this case, the Android service overrides the onTokenRefresh
method.
@Override
public void onTokenRefresh() {
String tkn = FirebaseInstanceId.getInstance().getInstanceId();
Log.d("Not","Token ["+tkn+"]");
}
}
[/java]
In this method, we just log the token, but it could be used in a real app to send the token to the server so that the server stores it somewhere.
Do not forget to declare this service in the Manifest.xml
.
<service android:name=".FireIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
[/xml]
Finally, we implement the service that handles incoming push notification:
[java] public class FireMsgService extends FirebaseMessagingService {@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("Msg", "Message received ["+remoteMessage+"]");
// Create Notification
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1410,
intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new
NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_stat_name)
.setContentTitle("Message")
.setContentText(remoteMessage.getNotification().getBody())
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1410, notificationBuilder.build());
}
}
[/java]
In onMessageReceived
method, we simply show the notification containing the message sent.
How to use Firebase API
An interesting aspect is the Firebase API. In other words, it is possible to invoke Android Firebase services using API. This is very interesting because we can integrate Firebase with external systems.
In this example, we will show how to send a notification invoking Firebase API. The first step is getting the Firebase authentication key so that we can authenticate the client. As a client, we will use Postman but we can use other clients too.
How to get the authentication key? Well, you get it from Firebase console:

Once we have the authentication key we can create our message:

and a body:

Notice that to
contains the smartphone token (described above).
Finally sending the message, we get as result:

And the notification appears on the destination smartphone.
At the end of this post, you gained the knowledge of how to use push notification in Android using Firebase. We have developed an Android app that receives Android notifications. Moreover, we have discovered how to configure Firebase to handle push notification. Finally, we have covered how to use Firebase API and how to integrate Firebase with an external system using these APIs.
You can expand further this project and handle different scenarios. Firebase Push notifications in Android are very useful and an Android app can use them every time is necessary to send an alert to users. There are several scenarios where Android notification can be integrated with Internet of Things: alert related to environmental monitoring or production systems and so on.
Once you know how to handle push notification in Android you have countless possibilities.
Thanks for your detailed tutorial. I have implemented this and working fine except the device not receiving push if the app force closed. Do you have any idea about this? If I force close app it does not receive push.
Thanks,
Sanal MS
From where we can create our message to send?
Is it require to set up server on our hosting for it or we can access it form some where else on Firebase console. Please let me know about it.
Can you explain? You can access Firebase using a client that wants to send notifications.
If you want to test it, you can use the Firebase console.
Did you have an answer of your question?
The request was missing an Authentification Key (FCM Token). Please, refer to section "Authentification" of the FCM documentation, at https://firebase.google.com/docs/cloud-messaging/server.
The request was missing an Authentification Key (FCM Token). Please, refer to section "Authentification" of the FCM documentation, at https://firebase.google.com/docs/cloud-messaging/server.
Error 401
I guess you didn’t follow al the steps in the tutorial. You are missing the Key you get from the console
Google provides exceptionally bad explanations from tool to tool.
Sometimes I ask myself do they want to make the tools usable.
The very simple case :
I want to send message to a topic. Can I do this way of FirebaseMessaging.sendMessage(RemoteMessage r)??
I don’t see any simple manual, example, header list, how I must define the topic in builder. Firebase tool on Android Studio takes me to irrelevant information how to subscribe from link “send..”. The only simple question, can I build and send topic message, and which data header correspond to topic, which to body. No information.
Anybody knows this?
thanks ..it work
If the app is in the background, I can’t set LargeIcon to notificationBuilder because onMessageReceived is not called.
Have a look at this interesting thread https://stackoverflow.com/questions/37711082/how-to-handle-notification-when-app-in-background-in-firebase
There is the explanation.
i love you for this….. i really do… straight to the point, effective, effiecient and powerful. i love you once again…. i just bookmarked your website…. 🙂 ..if only i could pay you enough.
is there a way to send the notification at specific time
I have read the entire post for add firebase push notification in Android, Absolutely this is a good article for me. And I am learnt a lot of things from it. After reading this I’ll update my post as well.
Thank you.
Dear Francesco, the only thing I see in Firebase is the ‘Sender ID’ and the API number, but not ‘smartphone_key’ and I don’t see how to configure it.
It is not seen where the ‘multicast id’ comes from, besides, do we have to do all this for each phone where one loads the application? Isn’t it very complex to carry out?
Thank you
What do you mean by smartphone_key. You must have an ID to identiy the smartphone
replace “notification” with “data” to receive notification if app closed
This article is very perfect.
I can make it 100% for push notification and run very well.
Thanks.
Thank you very much!
Very good article, thank you it really helped me.
What do I do if I want to send a single notification to several users or to all users?
Thank you
Best Article
Thanks.
Push Notifications are among the most effective tools you can use to engage your audience.