将所有推送通知合并为一个

时间:2015-03-18 03:31:18

标签: android push-notification android-notifications

我使用解析推送通知来通知我的应用用户,但是当我发送2个推送通知时,我希望它们合并为一个。

正如您在this image中所看到的,WhatsApp将所有通知合并为一个。我怎么能这样做?

到目前为止,我找到了这段代码:

Notification noti = new Notification.Builder()
     .setContentTitle("5 New mails from " + sender.toString())
     .setContentText(subject)
     .setSmallIcon(R.drawable.new_mail)
     .setLargeIcon(aBitmap)
     .setStyle(new Notification.InboxStyle()
         .addLine(str1)
         .addLine(str2)
         .setContentTitle("")
         .setSummaryText("+3 more"))
     .build();

但我不知道在哪里或如何使用它。

3 个答案:

答案 0 :(得分:1)

我不确定它在解析中是如何工作的,但我也为GCM做了同样的事情。我们在支持后使用调度程序在每隔5分钟后推送通知。有一个通知表,其中包含状态的所有通知,如果用户收到通知并执行某些操作,则会从前端更新,我们通过Web服务更新表。

假设你已经向Google服务器推送了第一个通知请求(请记住为此定义一个唯一的密钥:折叠密钥)并且它没有到达用户,现在当调度程序重新检查待处理的通知时,它将重新启动选择第一个,并且还有更多新的通知要推出类似的类型。您可以创建一个新请求,将这些请求与发送请求结合到Google服务器。

{ "collapse_key": "score_update",
  "time_to_live": 108,
  "delay_while_idle": true,
  "data": {
     "score": "4 x 8",
     "time": "15:16.2342"
   },
  "registration_ids":["4", "8", "15", "16", "23", "42"]
}

您需要为通知定义唯一的折叠键,如果您使用相同的折叠键创建新请求,则所有先前的待处理请求都将被丢弃,只有最新的请求将被推送到用户移动设备,这可能是几个通知列表。

答案 1 :(得分:0)

你做过任何研究吗?

The Android guide on notifications真的很好地解释了这一切。您还可以查看Android Notification design guide以获取有关如何最佳使用通知的其他建议。

要使用您已构建的通知,请添加以下代码:

final NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
notificationManager.notify(mId, noti);

稍后您可以更新通知以更改其内容,如下所述:

  

要设置通知以便更新,请通过调用NotificationManager.notify()向通知ID发出通知。要在发出通知后更新此通知,请更新或创建NotificationCompat.Builder对象,从中构建Notification对象,并使用您之前使用的相同ID发出通知。如果先前的通知仍然可见,则系统会从Notification对象的内容中更新它。如果先前的通知已被取消,则会创建新的通知。

答案 2 :(得分:-1)

设置通知时只需使用setGroup(Group-KEY

final static String GROUP_KEY_EMAILS = "group_key_emails";

// Build the notification, setting the group appropriately

Notification notif = new NotificationCompat.Builder(mContext)
         .setContentTitle("New mail from " + sender1)
         .setContentText(subject1)
         .setSmallIcon(R.drawable.new_mail)
         .setGroup(GROUP_KEY_EMAILS)
         .build();