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

PHP解析GCM返回JSON:如何获取NotRegistered错误值

提取GCM返回的"NotRegistered"错误值

嘿,我来帮你搞定这个问题!你已经拿到了解析后的GCM响应对象,但卡在了从results数组里提取NotRegistered错误信息这一步对吧?别慌,这其实很简单,咱们一步步来:

先回顾下你的GCM响应结构:

{"multicast_id":6500496951237632198,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}]}

这里的results是一个数组,里面装着每个目标设备的推送结果(这次只有1个失败的结果)。你打印$obj->results显示Array,刚好验证了它是数组类型。

两种提取方式(取决于JSON解析方式)

根据你解析JSON字符串时的设置,分两种情况处理:

情况1:JSON解析为对象(默认行为)

如果你是用json_decode($gcm_response)这种默认方式解析的,那么$obj是一个对象,$obj->results是对象数组,直接访问第一个元素的error属性即可:

// 获取错误信息
$error_message = $obj->results[0]->error;
// 输出结果就是 "NotRegistered"
echo $error_message;

情况2:JSON解析为关联数组

如果你解析时传了第二个参数true(比如json_decode($gcm_response, true)),那$obj其实是关联数组,写法就变成数组索引访问:

// 获取错误信息
$error_message = $obj['results'][0]['error'];
// 输出结果同样是 "NotRegistered"
echo $error_message;

进阶:处理多设备推送的情况

要是你一次推送给多个设备,results数组会有多个元素。这时候可以用循环遍历,逐个处理每个设备的结果:

// 假设$obj是解析后的对象
foreach ($obj->results as $device_result) {
    if (isset($device_result->error)) {
        echo "设备推送失败,错误:" . $device_result->error . "\n";
    } else {
        echo "设备推送成功,消息ID:" . $device_result->message_id . "\n";
    }
}

这样就能轻松拿到你需要的错误值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:47