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

如何将数据库查询结果序列化为FCM推送数据并解决LaravelFCM发送报错

问题原因

你遇到的报错由两个错误导致:

  1. 调用FCM::sendToTopic方法时,第四个参数传入了数据库查询得到的原始索引数组,没有使用PayloadDataBuilder构建的标准数据载荷
  2. FCM推送的data字段顶层必须是关联数组(键值对结构),你直接传入多条记录组成的索引数组不符合接口要求

解决方法

首先将查询到的列表数据包装为关联数组的自定义字段,再正确构建载荷发送即可,修正后的代码如下:

use App\Model\MyModel;
use LaravelFCM\Message\PayloadDataBuilder;
use LaravelFCM\Message\PayloadNotificationBuilder;
use LaravelFCM\Facades\FCM;
use LaravelFCM\Message\Topics; // 注意补充这个命名空间引入

// 其他逻辑代码

// 查询数据库得到列表数据
$listData = MyModel::where('foreign_table_id', $id)->select('col1','col2','col3')->get()->toArray();

// 包装为顶层是关联数组的结构,自定义字段items存储列表
$wrapData = [
    'items' => $listData,
    'count' => count($listData) // 可按需添加其他自定义字段
];

// 构建data载荷
$dataBuilder = new PayloadDataBuilder();
$dataBuilder->addData($wrapData);
$dataPayload = $dataBuilder->build();

// 构建主题(注意变量名统一,原代码中定义的$fcmTopic后续调用时误写为$topic会导致变量未定义)
$fcmTopic = new Topics();
$fcmTopic->topic('lorem_ipsum');

// 构建通知
$title = __('pn_title',['client' => 'JohnDOE']);
$notificationBuilder = new PayloadNotificationBuilder($title);
$notification = $notificationBuilder->build();

// 发送推送,传入构建好的data载荷和正确的主题变量
$status = FCM::sendToTopic($fcmTopic, null, $notification, $dataPayload);

安卓端接收说明

安卓应用收到推送后,从data字段中取出items字段解析,即可得到完整的数据库查询记录列表。

注意事项

FCM单条推送的总载荷大小不能超过4KB,如果查询的数据量较大,不建议直接通过推送传输全量数据,改为推送提醒告知端有新数据,由端主动调用接口拉取数据更稳妥。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:00:04