Seems like PendingIntent object is being cached and always return the same extra contents after getting a newly created one. In fact, PendingIntent needs to be different according to Intent.filterEquals.

Scenarios

Expected:

GIVEN you are building a message app using Notification messages
WHEN you receive your very first message and click the received notification
THEN an activity opens with detailed information about the message in context.

Not expected:

GIVEN you are building a message app using Notification messages
WHEN you receive your second message and click the received notification
THEN an activity opens with detailed information about your very first message.

Creating or updating the PendingIntent

When creating multiple PendingIntent objects and the only difference between them is the extra data, so they’ll be considered the same and the existing object will be returned.

A common mistake people make is to create multiple PendingIntent objects with Intents that only vary in their “extra” contents, expecting to get a different PendingIntent each time. This does not happen. (Google @ Android API Reference)

Consider using FLAG_CANCEL_CURRENT or FLAG_UPDATE_CURRENT. They will make sure that the current PendingIntent object is canceled before another one is created or it’ll notify the current object in order to replace the extra data.

PendingIntent contentIntent = PendingIntent.getActivity(
	context, 
	Constants.PUSH_REQUEST_CODE, 
	intent, 
	PendingIntent.FLAG_CANCEL_CURRENT); // Our darling flag