3

複数のユーザーにプッシュ通知を送信しようとしています.1人のユーザーに対してプッシュ通知を送信すると、複数のユーザーにメッセージを送信しようとすると問題が発生します。

200 MissingRegistration という応答を受け取りました (問題は、正しい方法で ID を送信していないことだと思います)

両方にメッセージを個別に送信すると機能するため、両方のIDが正しいです

これは私のコードです

    $gcmcodes=array("one user key","the other user key");

    if(isset($_GET['mensaje']))    $message = $_GET['mensaje'];
    $message2 = new gcm(); 
    $message2->sendMessageToPhone(2, $message,$gcmcodes);

  function sendMessageToPhone($collapseKey, $messageText, $gcmcodes)
  {

$apiKey = 'My apikey';

$headers = array('Authorization:key=' . $apiKey);
$data = array(
  'registration_ids' => $gcmcodes,
  'collapse_key' => $collapseKey,
  'data.message' => $messageText);

$ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send");
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, $data);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo"<pre>";
var_dump($gcmcode,$response);
echo"</pre>";

if (curl_errno($ch)) {
 return 'fail';
}
if ($httpCode != 200) {
 return 'status code 200';
}
curl_close($ch);
return "mensaje mandado con exito";

}

4

1 に答える 1

3

使用している形式は、一度に 1 つの通知を送信するためにのみ使用できます。複数の登録 ID に通知を送信するには、次の形式の JSON リクエストを送信する必要があります。

{ "collapse_key": "something",
  "time_to_live": 108,
  "delay_while_idle": true,
  "data": {
    "message": "some message"
  },
  "registration_ids":["4", "8", "15", "16", "23", "42"]
}

ああ、MissingRegistrationエラーが発生した理由は、プレーンテキスト形式を使用する場合、GCM は単一の登録 ID がregistration_idキーの値であると想定しているためです (registration_ids試したとおりではありません)。

于 2013-05-13T12:47:38.840 に答える