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.