Problema com GCM repetindo mensagem - Android

Galera boa tarde !

Desenvolvi uma notificação em Android, com pesquisas da internet e com o livro do Ricardo Lecheta, porem tanto exemplos da internet quanto exemplos do livro eu tive o mesmo problema, toda vez que eu envio uma segunda notificação a partir do primeiro envio, sempre esta apresentando a mensagem do primeiro envio na Activity e não mais a segunda, na notificação fica certo, porem na Activity esta sempre apresentando a primeira mensagem.

Na criação da notificação eu aponto uma Activity que informo que será apresentado a mensagem, nesta activity eu adiciono no putExtras a mensagem que será passa a tela, algo me diz que se trata da chave (key) usada para adicionar o parâmetro, segue meu código.

Se vocês poderem me ajudar agradeço muito !

Abraços

EnviarMensagemParaDevice.java

//Classe que envia a mensagem ao aparelho
public class EnviarMensagemParaDevice {

    private static final String DEVICE_REGISTRATION_ID = "ID DO CELULAR";
    private static final String API_KEY = "KEY DA APP";
    

    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        Sender sender = new Sender(API_KEY);
        Message message = new Message.Builder().addData("title", "TESTE NOTIFICATION").addData("author", "TESTE NOME AUTOR").addData("message", "NOVA MENSAGEM").build();
        sender.send(message, DEVICE_REGISTRATION_ID, 5);
        System.out.println("Mensagem Enviada: "+ message.getData().get("msg"));
        System.exit(0);
    }

NotificationCustomUtil.java

public class NotificationCustomUtil {
	private static NotificationManager mNotificationManager;
	
	public static void sendNotification(Context context, String title, String author, String message) {
        mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

		Intent intent = new Intent(context, MainActivity.class);
		intent.putExtra("msg", message);

		PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
	        .setSmallIcon(R.mipmap.ic_launcher)
	        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
	        .setContentTitle(title)
			.setContentText(author+": "+message);
        
        mBuilder.setContentIntent(contentIntent);
        
        Notification notification = mBuilder.build();
		notification.flags |= Notification.FLAG_AUTO_CANCEL;
		mNotificationManager.notify(AndroidSystemUtil.randInt(), notification);
    }
}

GcmIntentService.java

public class GcmIntentService extends IntentService {
	public static final String TAG = "Script";
	
	public GcmIntentService(){
		super(Constants.PROJECT_NUMBER);
	}
	
	@Override
	protected void onHandleIntent(Intent intent) {
		Bundle extras = intent.getExtras();
		GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(GcmIntentService.this);
		String title, author, message, messageType = gcm.getMessageType(intent);
		
		
		if(extras != null){
			if(GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)){
				Log.i(TAG, "Error: "+extras.toString());
			}
			else if(GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)){
				Log.i(TAG, "Deleted: "+extras.toString());
			}
			else if(GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)){
				title = extras.getString("title");
				author = extras.getString("author");
				message = extras.getString("message");
				
				NotificationCustomUtil.sendNotification(GcmIntentService.this, title, author, message);
			}
		}
		
		GcmBroadcastReceiver.completeWakefulIntent(intent);
	}

MainActivity.java


public class MainActivity extends Activity {
	public static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
	public static final String TAG = "Script";
	
	private String SENDER_ID = "";
	private String regId;
	private GoogleCloudMessaging gcm;
	private TextView tvRegistrationId;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		tvRegistrationId = (TextView) findViewById(R.id.tvRegistrationId);
		
		if(checkPlayServices()){
			gcm = GoogleCloudMessaging.getInstance(MainActivity.this);
			regId = AndroidSystemUtil.getRegistrationId(MainActivity.this);
			
			if(regId.trim().length() == 0){
				registerIdInBackground();
			}
		}

		String msg = getIntent().getStringExtra("msg");
		if(msg != null) {
			exibirMensagem(msg);
		}
	}

	private void exibirMensagem(final String msg) {
		TextView text = (TextView) findViewById(R.id.msg);
		text.append(msg + "\n------------------------\n");
		Log.i(TAG, msg);
	}

	
	@Override
	public void onResume(){
		super.onResume();
		checkPlayServices();
	}
	
	
	
	// UTIL
		public boolean checkPlayServices(){
			int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this);
			
			if(resultCode != ConnectionResult.SUCCESS){
				if(GooglePlayServicesUtil.isUserRecoverableError(resultCode)){
					GooglePlayServicesUtil.getErrorDialog(resultCode, MainActivity.this, PLAY_SERVICES_RESOLUTION_REQUEST);
				}
				else{
					Toast.makeText(MainActivity.this, "PlayServices sem suporte", Toast.LENGTH_SHORT).show();
					finish();
				}
				return(false);
			}
			return(true);
		}
		
		
		public void registerIdInBackground(){
			new AsyncTask(){
				@Override
				protected Object doInBackground(Object... params) {
					String msg = "";
					
					try{
						if(gcm == null){
							gcm = GoogleCloudMessaging.getInstance(MainActivity.this);
						}
						
						regId = gcm.register(Constants.PROJECT_NUMBER);
						
						msg = "Register Id MENSAGEM01: "+regId;

						Log.i(TAG, msg);

						String feedback = "";//HttpConnectionUtil.sendRegistrationIdToBackend(regId);
						Log.i(TAG, feedback);
						
						AndroidSystemUtil.storeRegistrationId(MainActivity.this, regId);
					}
					catch(IOException e){
						Log.i(TAG, e.getMessage());
					}
					
					return msg;
				}
				
				@Override
				public void onPostExecute(Object msg){
					tvRegistrationId.setText((String)msg);
				}
				
			}.execute(null, null, null);
		}
}

Como você tá criando uma PendingIntent passando a última flag 0, pode ser que a activity não esteja sendo atualizada com os dados novos que você passa via intent.putExtra.

Para tentar arrumar isso, troque sua PendingIntent para algo assim:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendignIntent.FLAG_UPDATE_CURRENT);