You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ionic+vue安卓开发FCM离线推送多条被覆盖仅最后一条到达问题

问题根因

  • 代码里所有推送都设置了固定相同的collapse_key值123,这是问题的核心原因:FCM 机制规定,相同collapse_key的消息在设备离线时会被折叠,仅保留最新的一条,等设备上线后只会推送这最后一条。
  • 设备在线时消息会即时下发,不会触发折叠逻辑,因此所有通知都能正常送达。该问题和time_to_live参数无关,因此调整这个参数不会生效。

解决方案

可根据实际业务需求二选一:

  1. 如果需要设备上线后接收所有离线期间的推送,直接删除collapse_key配置即可,没有配置该参数时FCM不会对消息做折叠处理。
  2. 如果确实有同类消息合并的需求,仅对需要合并的同类型通知设置相同的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:48:03