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

使用PHP向Android推送带data字段的通知时遇类型错误

FCM v1 API发送data字段报错的解决方法

问题原因

错误提示明确指出message.data[5].value(对应memeID)、message.data[9].value(对应commentCount)、message.data[10].value(对应mentioned)这三个字段的值是整数类型,但FCM v1 API要求data字段的所有值必须是字符串类型。旧版FCM API可能会自动处理数值类型的转换,但新版API执行更严格的类型校验,因此直接传入整数会触发INVALID_ARGUMENT错误。

解决方法

将$data数组中所有整数类型的值转换为字符串即可,有两种常见处理方式:

方式1:批量转换所有整数字段

使用array_walk遍历数组,自动将整数转为字符串:

// 处理$data数组,将所有int类型值转为字符串
array_walk($data, function(&$value) {
    if (is_int($value)) {
        $value = (string)$value;
    }
});

方式2:手动转换指定字段

如果只需要转换特定的几个字段,直接强制类型转换即可:

$data['memeID'] = (string)$data['memeID'];
$data['commentCount'] = (string)$data['commentCount'];
$data['mentioned'] = (string)$data['mentioned'];

修改后的完整代码示例

在原代码中加入类型转换逻辑即可:

// 先处理$data的类型转换
array_walk($data, function(&$value) {
    if (is_int($value)) {
        $value = (string)$value;
    }
});

$fields = [
    'message' => [
        'token' => $deviceToken,
        'notification' => [
            'title' => $notifTitle,
            'body' => $notifDesc
        ],
        'data' => $data
    ]
]; 

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/v1/projects/bla/messages: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( $fields ) );

$result = curl_exec($ch) . '<br><br>';
print($result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:33:28