Android Push notification using FCM (Firebase Cloud Messaging)

Shaktisinh Jadeja
Techsuzu
Published in
4 min readMar 25, 2017

What is FCM (Firebase Cloud Messaging) ?

Simply we can say FCM (Firebase Cloud Messaging) is a new version of GCM (Google Cloud Messaging).
It is a cross-platform messaging solution that lets you reliably deliver messages at no cost. Using FCM, you can send notification messages to drive user re-engagement and retention.

FCM (Firebase Cloud Messaging) Project setup on Firebase Console

Go to Firebase Console and create a new project

One popup will appear. Provide your app name (Project name) and country and click on CREATE PROJECT button

To implement Firebase to your Android app, click on Add Firebase to your Android app

Now enter your project package name and click on ADD APP to register your app

Download google-services.json file and click on CONTINUE button

Now click on FINISH button and complete your project setup on Firebase Console

Add FCM (Firebase Cloud Messaging) to Android app

Copy google-services.json file, go to your Android Project and paste it in app folder.

Go to project level (root level) build.gradle file and add the following code into dependencies

dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'

// Add this line
classpath 'com.google.gms:google-services:3.0.0'
}

Now go to app level build.gradle file and add the following lines

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.3.0'
testCompile 'junit:junit:4.12'
compile 'com.google.android.gms:play-services:9.0.0' // Add this line
compile 'com.google.firebase:firebase-messaging:9.0.0'
}

// Add this line
apply plugin: 'com.google.gms.google-services'

Sync your project

Now create MyFirebaseInstanceIDService.java class

package com.mypackage.fcmdemo;

import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;


public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {


@Override
public void onTokenRefresh() {

//For registration of token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();

//To displaying token on logcat
Log.d("TOKEN: ", refreshedToken);

}

}

Now create MyFirebaseMessagingService.java class

package com.mypackage.fcmdemo;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.v4.app.NotificationCompat;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;


public class MyFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage message) {
sendMyNotification(message.getNotification().getBody());
}


private void sendMyNotification(String message) {

//On click of notification it redirect to this Activity
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

Uri soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("My Firebase Push notification")
.setContentText(message)
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pendingIntent);

NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

notificationManager.notify(0, notificationBuilder.build());
}
}

Give the INTERNET permission and define both above services into AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage.fcmdemo">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

<service android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
</application>
</manifest>

Now run your application and check your logcat and you can find TOKEN

Send your first notification message

Go to Firebase Console and click on your project (e.g. FCMDemo)
Now click on Notifications

Now click on SEND YOUR FIRST MESSAGE button

Type your message, select your app and click on SEND MESSAGE button and you will get your first notification on your device.

If you like this article please like this and subscribe it. If you have any doubt feel free to ask on comment. Follow me on twitter. Your appreciation means lot to me. Thank you.

--

--

Shaktisinh Jadeja
Techsuzu

PM | PgM | TPM | DevOps | Android | ગુજરાતી