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:通知关闭后重复推送的主要内容,如果未能解决你的问题,请参考以下文章