2016-12-26 39 views
2

我有这段代码可以从Firebase Messaging获取通知。如何使用键/值处理数据并将其显示在Log或EditText中?我如何处理Firebase云消息传递中的数据有效负载?

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()); 
    } 
} 

回答

5

用这种方式,你可以处理FCM消息:

如果从控制台发送通知,数据是: remoteMessage.getNotification()getBody()

,如果从发送通知服务器,数据在: remoteMessage.getData()

例如,如果你的数据是json,你这样做:

@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()); 
    } 
} 

对于GET键/值对的数据,你可以使用:

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

    //you can get your text message here. 
    String text= data.get("text"); 
... 
} 
+0

感谢你,但我需要处理“数据” - 不通知,我的意思是数据 –

+0

感谢你,但我需要处理'数据' - 不通知,我的意思是这个结构(自定义数据)中的数据:关键:值 –

+0

@HeroGuevara回答编辑再次 – Saeid

相关问题