GCM:某些设备在Android中没有重新发送推送

时间:2016-01-12 10:07:01

标签: php android google-cloud-messaging

我从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次故障。

问题是什么?

1 个答案:

答案 0 :(得分:0)

其中一个可能是您获得NotRegistered的原因。请参阅Downstream message error response codes

  

未注册的设备200 +错误:未注册

     

现有的注册令牌可能在许多情况下停止有效,包括:

     
      
  • 如果客户端应用程序取消注册GCM。
  •   
  • 如果客户端应用程序自动取消注册,则可能会在用户卸载应用程序时发生。例如,在iOS上,如果APNS反馈服务将APNS令牌报告为无效。
  •   
  • 如果注册令牌过期(例如,Google可能决定刷新注册令牌,或者iOS设备的APNS令牌已过期)。
  •   
  • 如果客户端应用程序已更新,但新版本未配置为接收消息。
  •   
     

对于所有这些情况,请从应用服务器中删除此注册令牌,然后停止使用它来发送消息。