【问题标题】:Handle multiple notifications with GCM使用 GCM 处理多个通知
【发布时间】:2015-11-16 15:26:21
【问题描述】:

我可以通过 Google Cloud 消息传递进行基本的推送通知,但在处理多条消息时遇到了问题。我使用基本通知(例如,我让系统创建实际的通知消息),但在数据部分中提供要在我的应用程序中打开的 URL。

这是我目前所拥有的:

我的MainActivity 有一个意图过滤器:

<intent-filter>
    <action android:name="GCM" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

在我的 onCreate() 函数中,我有以下内容:

Intent startIntent = getIntent();
    if (startIntent.hasExtra("url")) {
    openUrl(startIntent.getStringExtra("url"));
}

我发送如下所示的有效负载:

{
  "registration_ids": [
    "..."
  ],
  "notification": {
    "body": "This is a body.",
    "title": "This is a title.",
    "icon": "app",
    "sound": "default",
    "click_action": "GCM"
  },
  "data": {
    "url": "/quiz/"
  }
}

到目前为止一切顺利。当我收到一条消息并单击它时,它会打开我的应用程序并加载 URL。当我收到多条消息时出现问题:

  1. 当我收到两条带有两个不同 URL 的消息时,我总是在我的MainActivity 中获得第一个通知的 URL。即使我点击了第二个通知。
  2. 当我的活动已经打开并且我收到一条消息时,单击它不会打开 URL(可能是因为那时没有调用 onCreate())。

我的猜测是两者都有些相关,我应该以某种不同的方式处理传入的消息。

【问题讨论】:

  • 从我目前的研究来看,Android 似乎对同一发件人的所有消息重用了相同的意图。解决它的通常方法是仅在数据中定义有效负载并自己构建通知。然而,这破坏了与 iOS 的兼容性。解决它的唯一方法是为 iOS 和 Android 发送不同的有效负载。

标签: android notifications push-notification google-cloud-messaging


【解决方案1】:

对不同的通知使用不同的通知 ID,这样它们就不会堆积。

因此,在创建这样的示例通知时,请确保使用彼此不同的 mId 推送通知。这样,每个通知都将单独显示。您可以执行此操作的其他方法是将 URL 添加到包含在 PendingIntent 或其他方式中的列表中,然后在您的应用程序中,遍历所有 URL 并执行您想要的任何操作,这样只有 1 个通知。

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!");

Intent resultIntent = new Intent(this, ResultActivity.class);

mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(mId, mBuilder.build());

编辑:至于为什么当您在应用程序运行时紧贴通知时什么都没有发生,需要查看您是如何构建通知的,可能还有您的活动代码。

【讨论】:

  • 正如我上面所写的,我自己并没有构建通知。我让 Android 使用通知格式为我做这件事。这是因为同样的消息也会发送到 iOS(它支持的内容有一些限制)
  • 你能告诉我你是如何让Android为你做的吗?我从来没有见过这样的东西,我在谷歌上找不到任何东西。
  • 以上所有代码。只要您在消息中指定通知负载(带有正文和文本),Android 就会为您显示通知。 click_action 指定点击它时会发生什么(通过意图过滤器)
  • 您很可能是在扩展GcmListenerService 的服务中收到通知后发送的。看看那里,看看你是否发现它是如何建造的。我想弄清楚你用什么来发送通知,因为它似乎是第 3 方在做。
  • 没有。这是我的 listenerservice: public class MyGcmListenerService extends GcmListenerService {} - 它是空的。请参阅developers.google.com/cloud-messaging/concept-options?hl=en“通知 GCM 代表客户端应用程序自动向最终用户设备显示消息。通知具有一组预定义的用户可见键。”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2016-10-08
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多