未在Payload中传入collapse_key时,推送通知是否会被合并?
我来帮你把这两个问题讲清楚哈:
1. 未传入
collapse_key时的具体行为 先结合你提到的打盹模式场景拆解:
如果设备已连接但处于doze mode(打盹模式),低优先级消息会被GCM存储,直到设备退出打盹模式。而collapse_key标志的作用正在于此:如果已有相同collapse_key(及注册令牌)的消息存储并等待投递,旧消息会被丢弃,新消息取而代之(即旧消息被新消息合并)。但如果未设置collapse_key,新旧消息都会被存储以待后续投递。
简单说就是:没传collapse_key的话,所有暂存的同设备消息都会被完整保留,等设备退出打盹模式后,会一条不落的全部推送给设备,不会出现新消息替换旧消息的情况。只有当你指定了相同的collapse_key,才会触发“新消息覆盖旧消息”的合并逻辑,最终只投递最新的那条。
2. 关于通知消息的默认合并行为
你提到的官方描述是:
除notification messages(通知消息)外,所有消息默认不可合并。
这句话的核心是:通知消息默认支持合并机制,而数据消息默认不支持,但这并不等于“用户离线时收到多条通知,只会收到一条”——关键还是看collapse_key的设置:
- 如果你给多条通知消息设置了相同的
collapse_key,那用户离线时这些通知会被合并,等用户上线后只会收到最新的那一条; - 如果你没设置
collapse_key,哪怕是通知消息,多条离线消息也会全部被保留,用户上线后会收到每一条独立的通知。
总结一下:通知消息只是“允许被合并”,但不会自动合并所有离线通知,是否合并完全取决于你有没有设置collapse_key,以及多消息的key是否一致。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

