Android GCM:通知关闭后重复推送

Posted

技术标签:

【中文标题】Android GCM:通知关闭后重复推送【英文标题】:Android GCM: duplicate push after notification dismiss 【发布时间】:2015-08-21 10:04:55 【问题描述】:

我正在向 android 设备发送带有 GCM 的通知并且它正确到达,但有一种情况是通知在被关闭后显示。重现步骤:

    打开启动服务以接收通知的应用程序。 使用notification 有效负载发送 gcm 消息。 通过向左/向右滑动此通知来关闭通知。如果它有action_click 元素,点击它也是有效的。 打开任务并关闭当前应用程序。 再次打开应用程序。当 GCM 服务再次启动时,它会收到之前关闭的通知。

我的代码是google使用GcmListenerService提供的example中最基本的代码。只需设置权限,将服务放入清单中,让谷歌为您显示通知。当提供的场景发生时,我在服务上的onMessageReceive 中被调用了两次,并使用相同的数据。

这是我要发送到 GCM 的通知负载:

 
  collapseKey: 'push',
  delayWhileIdle: true,
  timeToLive: 3600,
  data: undefined,
  notification:  
     body: 'test message 2 updated',
     title: 'Notification',
     icon: 'myicon' 
  ,
  contentAvailable: false 

编辑

我用的是play-services-gcm:7.8.0版本,不过也用7.5测试过 我可以重复该过程 5 次,之后,通知将永远消失。

【问题讨论】:

我使用 nodejs 发送它,所以我认为它不会解决你在 php 上的问题。不是吗? 默认情况下,从 gcm 推送的每个通知都有一个消息 ID,您可以跟踪此消息 ID 并保存在您的共享首选项中。当您收到来自 GCM 的另一次推送时,只需比较消息 ID,不要显示此通知。 那你的意思是这种行为是谷歌真正的意图吗?对我来说看起来很奇怪,这个解决方案是一种解决方法。经过一段时间后,这种情况似乎停止了,所以也许有一种方法可以将通知标记为已使用。 我认为这不像@JitenderDev 建议的那样。我从来没有遇到过这种情况,除非服务器端发生了一些错误并且它发送了两次相同的推送通知。您能否确认推送通知仅从您的服务器发送一次? @JanithaR 即使我从来没有观察到这一点。这仍然是当前问题的解决方法。 【参考方案1】:

我终于解决了这个问题。使用新的 GCM 实施,无需启动带来信息的服务,Google 会根据推送的选项在需要时启动它。

因此,如果您的代码中有这样的内容,请删除它们:

//This service extends GcmListenerService
Intent intent = new Intent(GCMNotificationService.class, context);
context.startService(intent);

您将不再遇到缓存通知的问题,收到两次相同的通知和一些奇怪的其他行为。

【讨论】:

以上是关于Android GCM:通知关闭后重复推送的主要内容,如果未能解决你的问题,请参考以下文章

应用程序完全关闭时不出现 Android 推送通知(使用 node-gcm)

为啥 GCM 推送通知会重复?

使用 GCM 关闭应用程序时在 iOS 中接收推送通知

Android 推送通知关闭:它是如何在内部工作的?

收到推送通知后如何触发操作[关闭]

如何接收应用程序停止或设备关闭时发送的 GCM 推送通知?