GCM响应不正确,缺少},{

时间:2013-12-27 21:54:37

标签: php android push-notification google-cloud-messaging

我发送的GCM推送消息(少于1000):

$Regids = mysql_query("SELECT regid FROM $tabel WHERE active = '1'");
$result_array = array();
while ($row = mysql_fetch_array($Regids)){
    $result_array[] = $row['regid'];
}

$headers = array(
    'Content-Type:application/json',
    'Authorization:key=' . $serverApiKey
);

 $data = array(
    'registration_ids' => $result_array,
    'data' => array(
        'type' => 'New',
        'title' => 'LH',
        'msg' => ''.$msj.''
    )
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if ($headers)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

$result = curl_exec($ch);

curl_close($ch);

当我打印$result以检查(并用于更新数据库)时,它显示:

{"multicast_id":000,"success":274,"failure":75,"canonical_ids":13,"results":[{"message_id":"123"},{"message_id":"123"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"123"},{"message_id":"123"},{"registration_id":"456","message_id":"123"}]}

没有},{在每个(规范)registration_id和下一个(成功)message_iderror之间。 (我缩短了响应以使其可读)

所以我的更新部分失败了

$result = json_decode($result);
for ($i = 0; $i < count($result->{'results'}); $i++) { 
    if ($result->{'results'}[$i]->{'message_id'}) {
        ...
    } elseif($result->{'results'}[$i]->{'error'}) {
        ...
    } elseif ($result->{'results'}[$i]->{'registration_id'}) {
        ...
    }
}

有人知道什么是错的吗?

1 个答案:

答案 0 :(得分:2)

您获得的回复格式是正确的。 Google仍然接受您获得规范注册ID的邮件,因此该邮件是成功的,这就是为什么除了该邮件的规范注册ID之外,您还会获得邮件ID。这就是规范注册ID之后没有括号的原因。