【发布时间】: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 即使我从来没有观察到这一点。这仍然是当前问题的解决方法。
标签: android notifications google-cloud-messaging