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

Android GCM: duplicate push after notification dismiss

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

  1. 打开启动服务接收通知的应用程序。
  2. 发送带有 notification 负载的 gcm 消息。
  3. 通过滑动 left/right 这条通知来关闭通知。如果它有action_click元素,点击它也是有效的。
  4. 打开任务并关闭当前应用程序。
  5. 再次打开应用程序。当 GCM 服务再次启动时,它会收到之前关闭的通知。

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

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

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

编辑:

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

因此,如果您的代码中有此行,删除它们:

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

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