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

Laravel中使用google/apiclient单次请求推送通知至多设备

Laravel中通过Google API Client实现FCM单次请求多设备推送

我已经在Laravel项目中集成了google/apiclient,需要实现单次请求向多个设备发送FCM推送通知,不想用foreach循环为每个设备token单独创建请求。现有单设备推送代码和循环推送的代码,但循环方式会产生大量请求,求更优的解决方案。

单设备推送代码

$notification = new Notification([
   'title' => $data['title'],
   'body' => $data['message']
]);

$message = new Message([
   'notification' => $notification,
   'data' => $data,
    'token' => $token
]);

$request = new FirebaseCloudMessaging\SendMessageRequest();
$request->setMessage($message);

$messaging = new FirebaseCloudMessaging($this->client);
$response = $messaging->projects_messages->send('projects/my-project', $request);

不推荐的循环推送方式

foreach ($tokens as $token){
    $message = new Message([
        'notification' => $notification,
        'data' => $data,
        'token' => $token
    ]);
    $request = new FirebaseCloudMessaging\SendMessageRequest();
    $request->setMessage($message);
    $messaging = new FirebaseCloudMessaging($this->client);
    $response = $messaging->projects_messages->send('projects/my-project', $request);
}

解决方案:使用FCM Multicast消息(单次请求推多设备)

FCM官方支持通过tokens参数批量传入设备token数组,实现单次请求推送至多个设备,具体修改如下:

修改后的代码

$notification = new Notification([
    'title' => $data['title'],
    'body' => $data['message']
]);

// 用tokens参数替代单个token,传入多设备token数组
$message = new Message([
    'notification' => $notification,
    'data' => $data,
    'tokens' => $tokens // 这里传入你的设备token数组
]);

$request = new FirebaseCloudMessaging\SendMessageRequest();
$request->setMessage($message);

$messaging = new FirebaseCloudMessaging($this->client);
// 单次请求完成多设备推送
$response = $messaging->projects_messages->send('projects/my-project', $request);

注意事项

  • 单次Multicast消息最多支持500个设备token,如果你的token数组长度超过500,需要用array_chunk分割成每500个一组,再循环发送每组(每组仍是单次请求):
    $tokenGroups = array_chunk($tokens, 500);
    foreach ($tokenGroups as $group) {
        $message = new Message([
            'notification' => $notification,
            'data' => $data,
            'tokens' => $group
        ]);
        $request = new FirebaseCloudMessaging\SendMessageRequest();
        $request->setMessage($message);
        $response = $messaging->projects_messages->send('projects/my-project', $request);
        // 可在此处理每组的推送结果
    }
    
  • 推送响应中会包含每个设备的推送状态,可解析$response来排查无效token或推送失败的情况。

内容的提问来源于stack exchange,提问作者Shriyank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:22:16