城市飞艇 - 在消息传递平台上聚合类似的推送通知

时间:2014-04-17 20:03:15

标签: android push-notification apple-push-notifications urbanairship.com

我正在创建一个消息传递应用程序,就像任何移动消息服务一样,当应用程序没有连接到后端时,需要推送通知。

让我用一个例子来说明我遇到的情景。

There is a conversation between User A & User B

// User B's application is idle (not receiving messages from our backend)

// User A sends User B a message
A --> B

由于用户B未连接,他/她会收到推送通知,向他/她发出打开应用并同步消息的提示。 用户B的手机现在在他/她的锁定屏幕上有一个通知,如此

Message from User A

然后......

// User A sends User B another message
A --> B

用户B的手机现在在用户A的锁定屏幕上有两个单独的通知。 这些消息如下所示:

Message from User A
Message from User A

但是,我希望锁屏能够读到这样的内容

Message from User A (2)

我不确定如何将通知汇总到电话后进行汇总,假设他们附有元数据,这些元数据清楚地表明发送者"发件人"消息是。

目前,这是我发送给Urban Airship的有效载荷

function sendPushNotification (event, user) {
  if (event.type == 21 || event.type == 22 || event.type == 24) {
    var sender = event.sender.username;
    var alert = "from @" + sender;
    var reciever = user.username;
    var payload = {
      "audience": {
        "alias" : reciever
      },

      "device_types": [ "ios", "android" ],

      "notification": {

        "ios": {
          "alert": alert,
            "badge": "+1",
            "sound": "default",
            "extra": { "username": sender }
        },

        "android": {
          "alert": alert,
          "collapse_key": "inboxappco",
          "extra": { "username": sender }
        }

      }
    };
    console.log("Hello 2");
    pushNotification(payload);
  } else {
    // modularize for general purpose notifications
  }
}; // end sendPushNotification function

有关如何利用发件人元数据,将来自同一个人的连续推送通知聚合到锁定屏幕上的一个订单项中的任何建议?

先谢谢SOF。

1 个答案:

答案 0 :(得分:0)

您的应用似乎需要创建自己的自定义推送通知对象,并以某种方式访问​​NotificationManager

PushManager.shared().setNotificationBuilder(new YourCustomNotificationObject());

我不确定Urban Airship如何公开NotificationManager,但您需要在NotificationBuilder中使用setGroup("arbitrarygroupname")访问者

除非您的目标是最低API级别20,否则这是访问者不可用,因此您必须使用v4 + NotificationCompat.Builder对象,并确保您的支持库版本为20或更高。

编辑,从UrbanAirship 4.0.3开始,这是不可能的,服务器端你可以跟踪一系列推送通知并在每次推送时使用collapse_key参数, collapse_key将替换相同类型的推送通知,因此您的服务器必须发送具有不同名称的推送通知,名称为Message from User A (2),而不是让Android系统处理该客户端