我从php服务器向android设备发送推送通知,但有些设备没有得到推送通知。
以下是服务器的状态
{"multicast_id":4893937277293136804,"success":4,"failure":10,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1452592669440333%c40440a4f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1452592669442897%c40440a4f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1452592669442899%c40440a4f9fd7ecd"},{"error":"NotRegistered"},{"error":"NotRegistered"},{"message_id":"0:1452592669442901%c40440a4f9fd7ecd"}]}
PHP
$key="XXXXXX";
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' =>$result,
'data' => array( "message" =>$msg,"title"=>$title,"soundname"=>"beep.wav" ),
);
$headers = array(
'Authorization: key=' . $key,
'Content-Type: application/json'
);
try{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
$res = curl_exec($ch);
print_r($res)
}
从响应中只有4台设备成功获得响应,但发生了10次故障。
问题是什么?
答案 0 :(得分:0)
其中一个可能是您获得NotRegistered
的原因。请参阅Downstream message error response codes。
未注册的设备200 +错误:未注册
现有的注册令牌可能在许多情况下停止有效,包括:
- 如果客户端应用程序取消注册GCM。
- 如果客户端应用程序自动取消注册,则可能会在用户卸载应用程序时发生。例如,在iOS上,如果APNS反馈服务将APNS令牌报告为无效。
- 如果注册令牌过期(例如,Google可能决定刷新注册令牌,或者iOS设备的APNS令牌已过期)。
- 如果客户端应用程序已更新,但新版本未配置为接收消息。
对于所有这些情况,请从应用服务器中删除此注册令牌,然后停止使用它来发送消息。