GCM:一些设备在android中没有收到推送通知


GCM: Some devices Does not recive pushnotification in android

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

问题出在哪里?

其中之一可能是获得NotRegistered的原因。请参阅下行消息错误响应代码。

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

现有的注册令牌可能在多种情况下失效,包括:

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

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