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

使用kreait/laravel-firebase的sendMulticast结合Token分块发送推送通知时遭遇501错误求助

使用kreait/laravel-firebase的sendMulticast结合Token分块发送推送通知时遭遇501错误求助

嘿,我来帮你排查这个501错误的问题~

从你给出的错误信息和代码来看,这个问题大概率是调用sendMulticast的方式不符合当前包版本的要求导致的,我给你梳理几个可行的解决方向:

1. 修正消息实例类型与调用方式

在新版的kreait/firebase-php(尤其是v6及以上版本),sendMulticast方法不再支持传入CloudMessage加单独的tokens数组这种调用形式,而是需要创建MulticastMessage实例,并直接把目标tokens绑定到这个消息对象上。

你可以把代码改成这样试试:

$all_data = array_chunk($recipients, 500); // Split tokens into chunks of 500

foreach ($all_data as $deviceTokens) {
    // 替换CloudMessage为MulticastMessage实例
    $message = MulticastMessage::new()
        ->withNotification($notification)
        ->withData([
            'extra_data' => 'some_data',
        ])
        ->setTokens($deviceTokens); // 直接将分块后的tokens绑定到消息中

    // 仅传入MulticastMessage实例即可
    $result = $messaging->sendMulticast($message);
    dd($result); // Check the result for each batch
}

2. 检查包版本兼容性

如果上面的修改没解决问题,你需要确认kreait/laravel-firebase和kreait/firebase-php的版本是否兼容:

  • 确保两个包的版本匹配(比如laravel-firebase v3对应firebase-php v6+)
  • 如果你使用的是较旧的包版本,可能需要改用旧版的sendToMultipleDevices方法,它支持传入CloudMessage加tokens数组的形式:
// 旧版本兼容写法
$result = $messaging->sendToMultipleDevices($deviceTokens, $message);

3. 验证Messaging实例的初始化

还要确认你的$messaging实例是正确初始化的,建议通过Laravel的依赖注入或门面来获取:

use Kreait\Laravel\Firebase\Facades\Firebase;

$messaging = Firebase::messaging();

你可以先尝试第一种修改方案,这是引发这个501错误最常见的原因。

备注:内容来源于stack exchange,提问作者sr sagor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:35:31