Android应用GCM重复通知求助:后台/关闭时收两次推送
解决Android GCM后台/关闭状态下重复通知问题
嘿,我之前也踩过GCM推送重复通知的坑,尤其是应用在后台或者完全关闭的时候,简直烦死人!咱们一步步来排查解决:
1. 检查并设置collapse_key参数
这是最常见的原因之一!GCM的collapse_key用于合并同一类型的重复消息,如果你的推送请求没设置这个参数,或者不同消息用了不同的key,GCM可能会下发多条重复通知。
解决方法:在服务器发送推送时,给同一用户的同类型通知设置相同的collapse_key。比如所有更新类通知都用"update_notification"作为key,这样GCM会自动合并重复的消息,不会多次推送。
示例服务器端代码(Java):
Sender sender = new Sender(YOUR_GCM_API_KEY); Message message = new Message.Builder() .collapseKey("update_notification") // 统一的折叠key .addData("title", "您有新消息") .addData("content", "点击查看详情") .build(); // 设置重试次数为1,避免过度重试导致重复发送 Result result = sender.send(message, deviceRegistrationId, 1);
2. 避免客户端与系统重复创建通知
如果你的推送消息同时包含notification字段和data字段,GCM会自动在系统状态栏展示通知,而如果你的客户端代码又在onMessageReceived里手动创建了通知,就会出现两次通知。
解决方法:
- 方案一:只使用
data字段,完全由客户端代码处理通知的创建和展示; - 方案二:如果使用
notification字段,就不要在客户端代码中重复创建通知,让系统自动处理。
示例客户端onMessageReceived处理(仅处理data字段):
@Override public void onMessageReceived(RemoteMessage remoteMessage) { // 提取data字段内容 Map<String, String> data = remoteMessage.getData(); String title = data.get("title"); String content = data.get("content"); // 手动创建通知 NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.drawable.ic_notification) .setContentTitle(title) .setContentText(content) .setPriority(NotificationCompat.PRIORITY_HIGH); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(NOTIFICATION_ID, builder.build()); }
3. 清理重复的GCM注册令牌
如果应用多次注册GCM,导致服务器保存了同一个设备的多个有效令牌,推送时会给每个令牌都发送一次,自然会收到多次通知。
解决方法:
- 客户端每次启动时,检查当前GCM令牌是否与服务器保存的一致,若有变化则更新服务器的令牌记录;
- 服务器定期清理无效令牌(比如推送返回
InvalidRegistration错误的令牌)。
4. 检查服务器推送逻辑的重复发送
有时候服务器的重试机制没处理好,比如网络波动时重复发送了同一条推送请求,也会导致重复通知。
解决方法:
- 给每条推送消息添加唯一标识(比如UUID),服务器端记录已发送的标识,避免重复发送;
- 合理设置重试条件,只有在确认GCM未收到请求时才重试(比如收到特定错误码时)。
5. 检查Manifest中的重复配置
如果在AndroidManifest.xml中重复注册了GCM相关的广播接收器或服务,可能会导致多次接收消息,进而触发多次通知。
解决方法:
- 检查Manifest文件,确保只有一组GCM相关的
receiver和service配置,没有重复条目。
先从上面前两点开始排查,这两个是最容易触发重复通知的原因,一般解决后就能搞定问题啦!
内容的提问来源于stack exchange,提问作者marwa ben ali
相关产品推荐
相关产品推荐

