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
相关产品推荐
相关产品推荐

