6

I have this code to get the notification from Firebase Messaging. How can I handle the data using key / value and show it in a Log or an EditText?

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseMsgService";

    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */
    // [START receive_message]
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {


        // [START_EXCLUDE]
        // There are two types of messages data messages and notification messages. Data messages are handled
        // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
        // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
        // is in the foreground. When the app is in the background an automatically generated notification is displayed.
        // When the user taps on the notification they are returned to the app. Messages containing both notification
        // and data payloads are treated as notification messages. The Firebase console always sends notification
        // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
        // [END_EXCLUDE]

        // TODO(developer): Handle FCM messages here.
        // Not getting messages here? See why this may be:  
        Log.d(TAG, "From: " + remoteMessage.getFrom());

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {

        }

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

        // Also if you intend on generating your own notifications as a result of a received FCM
        // message, here is where that should be initiated. See sendNotification method below.
    }
    // [END receive_message]

    /**
     * Create and show a simple notification containing the received FCM message.
     *
     * @param messageBody FCM message body received.
     */
    private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, Home.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.com_facebook_close)
                .setContentTitle("FCM Message")
                .setContentText(messageBody)

                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
}
AL.
  • 36,815
  • 10
  • 142
  • 281
Hero Guevara
  • 107
  • 1
  • 7

1 Answers1

7

With this way you can handle FCM message :

if you send notification from console , data are in : remoteMessage.getNotification().getBody()

and if send notification from server , data are in : remoteMessage.getData()

for example if your data are json you do this :

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    try {
        if (remoteMessage.getNotification() != null) {
            showNotification_fromConsole(new JSONObject(remoteMessage.getNotification().getBody()));
        } else if (!remoteMessage.getData().isEmpty()) {
            else showNotification_fromData(notifObject)
        }
    } catch (Exception e) {
        Log.d("json error", e.toString());
    }
}

for get key/value pair data you can use :

 @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
  ...
   Map<String, String> data = remoteMessage.getData();

  //you can get your text message here.
  String text= data.get("text");
 ...
}
Saeid
  • 2,261
  • 4
  • 27
  • 59
  • thanks you , but i need to handle ' Data ' - Not Notification , i mean data – Hero Guevara Dec 26 '16 at 18:49
  • thanks you , but i need to handle ' Data ' - Not Notification , i mean data in This Structure ( Custom data ) : Key : Value – Hero Guevara Dec 26 '16 at 18:50
  • i have Problem now ! how i can Send the value ( i get Finally ) - how i can send the value to MyActivity ? – Hero Guevara Dec 26 '16 at 19:35
  • @HeroGuevara look this : http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-on-android – Saeid Dec 26 '16 at 19:49
  • thanks Saeid , but this way not Working , Basic Problem About : How i can move Value from Class(MyFirebaseMessagingService) to MyActivity(MainActivity) ? – Hero Guevara Dec 26 '16 at 19:55
  • you should create a notification to notify user for new notification , then make `Intent notificationIntent = new Intent(this, main.class);` that if user touch notification ,open a `activity` , then put your data in `intent` , if not understand ask new question and tag me to answer fully. - here is a limit to respond – Saeid Dec 26 '16 at 20:23