8

我正面临 GCM 推送通知的问题。我收到以下错误。

{
  "multicast_id":4630467710672911593,
  "success":0,
  "failure":1,
  "canonical_ids":0,
  "results":[{
      "error":"MismatchSenderId"
  }]
}

以下是代码。任何帮助将非常感激。提前致谢。

public function gcmPush() 
{
    $regId = "APA91bHFcgOssQZEqtdUk3EC1ojwC5-LVG3NPV2bMqKyC9rPymR6StmAbz-N7Ss8fnvruZhWWNrR3lmBqpjQItlu00AKHPbltBclUJF-EfC5qG4CF2xiuYYC0NCf8u5rbiYFk8ARhIT4lY2AEPWzGpl1OtTvQEC0gA"; 
    $registatoin_ids = array($regId); 
    $message = array("msg" => 12345); 

    $this->send_notification($registatoin_ids, $message);
}

public function send_notification($registatoin_ids, $message) 
{
  // Set POST variables
  $url = 'https://android.googleapis.com/gcm/send';         
  define('GOOGLE_API_KEY', 'AIzaSyBavsIgQKo1Nf9wKZ5o_fGvE_6MI52LFR0');
  $fields = array(
    'registration_ids' => $registatoin_ids,
    'data' => $message,
  );
  $headers = array(
   'Authorization: key=' . GOOGLE_API_KEY,
   'Content-Type: application/json'
  );

  // Open connection
  $ch = curl_init();

  // Set the url, number of POST vars, POST data
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  // Disabling SSL Certificate support temporarly
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

  // Execute post
  $result = curl_exec($ch)
  if ($result === FALSE) {
      die('Curl failed: ' . curl_error($ch));
  }

  // Close connection
  curl_close($ch);
  echo $result;
}
4

1 回答 1

9

“MismatchSenderId”是我们现在遇到的明显问题。

以下是导致此问题的可能情况。

案例 1:发件人 ID 不匹配 -> 请检查您正在使用的项目编号。如果正确与否。

案例 2:错误的 API 密钥 -> 请确保您使用的是相同的 API_Key。并且在大多数情况下,我们需要生成 Server_Key 而不是 Android_Key。

案例 3:错误的设备 ID -> 大部分时间问题是由于错误的设备 ID(GCM 生成的注册 ID)造成的。

请确保每当您生成新的 API 密钥时,您设备的设备 ID 都会更改。然后大约需要5五分钟才能见效。

注意:您的设备 ID 与 API KEY 绑定。

所以....

--创建新密钥。

--GCM for Android 在 Google Dev 中“打开”。安慰。

--设备注册后端很好(Android项目正在做它的工作)。服务器上的设备密钥。

--发送到设备。失败!每次都从 GCM 返回相同的消息。

回顾一下。这不是 Android Studio、Android 操作系统或设备问题。GCM 服务器甚至没有尝试将消息发送到设备。我的服务器发送到 GCM,它返回消息......

{"multicast_id":6047824495557336291,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]} 

到服务器。据我所知,这意味着设备的 ID(在注册推送时返回给设备的 ID,与保存在后端(在控制面板中)的 ID 不匹配,或者与 API 无关发送消息时使用的密钥。

发送,当然,在我的服务器上开始,进入 GCM,然后进入设备。

这是没有发生的事情。消息从我的服务器发送到 GCM 并返回到我的服务器 - 出现错误。

你们所有人都可以想象到超级令人沮丧-我们以前都经历过这种噩梦般的事情:-)

参考:https ://www.buzztouch.com/forum/thread.php?tid=C3CED924C86828C2172E924

希望它能解决你的问题。

于 2016-04-07T05:20:03.860 回答