Android Push notification using FCM (Firebase Cloud Messaging)
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.