open a specific activity from firebase notification

If you want to open your app and perform a specific action [while backgrounded], set click_action in the notification payload and map it to an intent filter in the Activity you want to launch. For example, set click_action to OPEN_ACTIVITY_1 to trigger an intent filter like the following:

As suggested in FCM docs, ask backend to send JSON data in the form like this,

{
    "to": "some_device_token",

    "content_available": true,
    "notification": {
        "title": "hello",
        "body": "yo",
        "click_action": "OPEN_ACTIVITY_1" // for intent filter in your activity
    },

    "data": {
        "extra": "juice"
    }
}

and in your mainfest file add intent-filter for your activity as below

<intent-filter>
  <action android:name="OPEN_ACTIVITY_1" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

When you click the notification, it will open the app and go straight to activity that you define in click_action, in this case "OPEN_ACTIVTY_1". And inside that activity you can get the data by :

Bundle b = getIntent().getExtras();// add these lines of code to get data from notification
String someData = b.getString("someData");

Check out below links for more help:

Firebase FCM notifications click_action payload

Firebase onMessageReceived not called when app in background

Firebase console: How to specify click_action for notifications


I know this question has been around for a while, but I wanted to show my solution anyway. its much simpler than those presented. so now I'm wandering if its bad practice. but it works: I use the payload json object to store an integer :

JSONObject payload = data.getJSONObject("payload");
int destination = payload.getInt("click_action");

then I just use a simple switch statement to launch the right activity based on the integer result:

Intent resultIntent;
switch(destination){
    case 1:
        resultIntent = new Intent(getApplicationContext(), UserProfileActivity.class);
        resultIntent.putExtra("message", message);
        break;
    default:
        resultIntent = new Intent(getApplicationContext(), MainActivity.class);
        resultIntent.putExtra("message", message);
        break;
}

Simple.