GCM规范ID

Mar*_*ina 15 java android push-notification google-cloud-messaging

当为1个设备GCM具有多个regids时,返回规范id错误:

{"multicast_id":xxxx,"success":2,"failure":0,"canonical_ids":1,"results":[{"message_id":"xxxxx"},{"registration_id":"newest reg ID here","message_id":"xxxxxx"}]}
Run Code Online (Sandbox Code Playgroud)

所以它显示了GCM应该使用的最新regid,但为什么不显示你应该删除的regid(旧的)?我怎么知道旧的regid是什么以及我应该从我的数据库中删除哪一个?

Mar*_*ina 8

伊兰的回答是正确的,虽然我发现它对我来说仍然有点模糊.但是,多亏了他,我找到了解决方案.

说这是你的回答:

{
   "multicast_id":xxxxx,
   "success":7,
   "failure":0,
   "canonical_ids":2,
   "results":[
      {
         "message_id":"0:xxx%xxxxx"
      },
      {
         "message_id":"0:xxx%xxxxx"
      },
      {
         "registration_id":"MY_REG_ID_1",
         "message_id":"0:xxx%xxxxx"
      },
      {
         "message_id":"0:xxx%xxxxx"
      },
      {
         "message_id":"0:xxx%xxxxx"
      },
      {
         "registration_id":"MY_REG_ID_2",
         "message_id":"0:xxx%xxxxx"
      },
      {
         "message_id":"0:xxx%xxxxx"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,7条消息中有2条是重复的.

这是我向服务器发送消息的方式:

$tokenResult = mysql_query("SELECT reg_ids FROM table_with_regids"); //
$i = 0;
while($row = mysql_fetch_array($tokenResult)) {

     $registrationIDs[$i] = $row['reg_ids'];
     $i++;
}
Run Code Online (Sandbox Code Playgroud)

来自伊兰的回答:

由于您收到Google针对您发送的每个请求的回复,因此您应该知道在触发此回复的请求中向Google发送了哪些注册ID.您必须删除的旧注册ID是该请求中的第二个注册ID.

这意味着数组$ registrationIDs []的索引25应该替换为MY_REG_ID_1MY_REG_ID_2.

最后检查double值并删除完全相同的重复项.结果应该是一个包含5个regids的数组(或直接从数组中删除该索引,而不是替换为MY_REG_ID_#).