ionic+vue安卓开发FCM离线推送多条被覆盖仅最后一条到达问题
问题根因
- 代码里所有推送都设置了固定相同的
collapse_key值123,这是问题的核心原因:FCM 机制规定,相同collapse_key的消息在设备离线时会被折叠,仅保留最新的一条,等设备上线后只会推送这最后一条。 - 设备在线时消息会即时下发,不会触发折叠逻辑,因此所有通知都能正常送达。该问题和
time_to_live参数无关,因此调整这个参数不会生效。
解决方案
可根据实际业务需求二选一:
- 如果需要设备上线后接收所有离线期间的推送,直接删除
collapse_key配置即可,没有配置该参数时FCM不会对消息做折叠处理。 - 如果确实有同类消息合并的需求,仅对需要合并的同类型通知设置相同的
collapse_key,不同类型的通知设置不同的key值即可。
修正后代码示例
function sendNotification($i){ $apiKey = "API_KEY"; $tokens = ["CLIENT_TOKEN"]; $data = array( "registration_ids" => $tokens, "notification" => array( "title" => "title ".$i, "body" => "content ".$i, "color" => "#33DDFF", "priority" => "high" // 移除固定的collapse_key配置 ), ); $headers = array( "Authorization: key=".$apiKey , "Content-Type: application/json" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL , "https://fcm.googleapis.com/fcm/send"); curl_setopt($ch, CURLOPT_POST , true); curl_setopt($ch, CURLOPT_HTTPHEADER , $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER , true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false); curl_setopt($ch, CURLOPT_POSTFIELDS , json_encode($data) ); $result = curl_exec($ch); curl_close($ch); } for($i=11;$i<16;$i++){ sendNotification($i); }
内容的提问来源于stack exchange,提问作者zicjk
相关产品推荐
相关产品推荐

