应用在后台时更新Firebase推送通知

时间:2016-12-12 14:20:46

标签: android firebase-cloud-messaging

如何在应用处于后台时更新包含数据有效负载的Firebase推送通知?有没有办法在Firebase API的通知中指定通知ID?

我的请求json到firebase api。

{
"registration_ids": ["device id"], 
"collapse_key": "Updates Available"
"notification": {
                    "title": "title", 
                    "desc": "description",
                    "body": "Message received", 
                    "sound": "TYPE_NOTIFICATION",
                    "click_action": "sometargetAction"
                },
"data":         {
                    "user": 
                    {
                        "id": 2
                        "name":"leapingwolf", 
                        "occupation": "passionate coder"
                    }
                }
}

当app在onMessageReceived函数中位于前台时,我使用“user”的id附加到已发送的推送通知

        User user = remoteMessage.getData().get("user");
        Gson gson = new GsonBuilder().create();
        User userModel =  gson.fromJson(user, User.class);
        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setContentTitle("FCM Message With Payload")
                .setContentText(messageBody)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

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

        notificationManager.notify(userModel.getId(), notificationBuilder.build());

完整项目位于github https://github.com/akshatashan/FirebaseCloudMessagingDemo

2 个答案:

答案 0 :(得分:3)

我根据链接中发布的答案找出了解决方案 How to handle notification when app in background in Firebase

总而言之,如果请求json没有通知标记,则无论应用程序是否在后台,都会调用onMessageReceived。发送数据标记中的所有相关字段,并在onMessageReceived中解析它。

答案 1 :(得分:1)

我认为你要找的是Collapsible Messages

  

可折叠消息是一条消息,如果尚未传递给设备,则该消息可能会被包含相同折叠键的新消息所取代。

对于message types(通知和数据),似乎它们都可以设置为可折叠,在您的情况下,您要求的是数据有效负载:

  

数据讯息

     
      
  • 客户端应用负责处理数据消息。数据消息只有自定义键值对。
  •   
  • 使用您的应用服务器和FCM服务器API:仅设置数据密钥。 可以是可折叠的,也可以是不可折叠的
  •   

简而言之,您只需相应地使用collapse_key

  

此参数标识可以折叠的一组消息(例如,使用 collapse_key:"可用更新" ),以便在交付时只发送最后一条消息恢复。这是为了避免在设备重新联机或变为活动状态时发送过多相同的消息。

     

请注意,无法保证邮件的发送顺序。

     

注意:在任何给定时间最多允许4个不同的折叠键。这意味着FCM连接服务器可以同时为每个客户端应用程序存储4个不同的发送到同步消息。如果超过此数字,则无法保证FCM连接服务器将保留哪4个折叠键。