0

我目前正在为 android 开发 GCM 并使用 PHP 实现服务器代码。现在,我的代码如下所示:

$url = 'https://android.googleapis.com/gcm/send';
$registrationIDs = array('device1', 'device2');//device ids from database.

$fields = array(
                'registration_ids'  => $registrationIDs,
                'data'              => array( "message" => $message ),
                );

$headers = array( 
                    'Authorization: key=' . $apiKey,
                    'Content-Type: application/json'
                );

// Open connection
$ch = curl_init();

// Execute post
$result = curl_exec($ch);

// Close connection
curl_close($ch);

当我执行时,结果如下:

{
  "multicast_id": 5407120473654582795,
  "success": 1,
  "failure": 1,
  "canonical_ids": 1,
  "results": [
    {
      "registration_id": "skjdfhksdfgksudghldshfgkdjfghdiugf",
      "message_id": "0:1354101888763222%14c0e050f9fd7ecd"
    },
    {
      "error": "MismatchSenderId"
    }
  ]
}

GCM页面上有注释:

  • 如果消息已创建,但结果返回了规范注册 ID,则需要将当前注册 ID 替换为规范注册 ID。
  • 如果返回的错误是 NotRegistered,则需要删除该注册 ID,因为该应用程序已从设备上卸载。

我的问题是:

  1. 根据服务器输出,我有 1 个规范结果。但是,我不确定它属于哪个设备。我如何确定它?
  2. 基于问题(1),我知道我可以一次将设备发送到 GCM 一个。但是,这又提出了另一个问题。如果我有数百万台设备怎么办?
4

2 回答 2

1

基于此页面上的信息GCM 架构概述

它是数组中第一个需要将其 regid 替换为“skjdfhksdfgksudghldshfgkdjfghdiugf”的元素。数组中的第二个元素是彻底失败。

数以百万计的设备?- 不!高达 1000 ? - 是的

在同一页上是

registration_ids 一个字符串数组,其中包含接收消息的设备列表(注册 ID)。它必须包含至少 1 个且最多 1000 个注册 ID。

于 2012-11-28T14:01:07.527 回答
0

您可以在GCM 高级主题页面上阅读有关规范 ID 的更多信息:

如果稍后您尝试使用不同的注册 ID 发送消息,GCM 将照常处理请求,但它将在响应的 registration_id 字段中包含规范注册 ID。确保使用此规范 ID 替换存储在您服务器中的注册 ID,因为最终您使用的 ID 将停止工作。

您还可以在“响应格式”部分阅读更多信息。

如果您要向数百万台设备发送消息,则必须使用 JSON 以 1000 个注册 ID 块的形式发送消息。Google 文档提供了以下作为发送到六台设备的示例:

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "registration_ids": ["4", "8", "15", "16", "23", "42"]
}
于 2012-12-04T17:17:44.210 回答