2012-11-28 26 views
0

我目前正在使用GCM for android并使用PHP实现服务器代码。现在,我的代码如下所示:我应该如何在服务器端实施GCM推送过程?

$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。但是,这提出了另一个问题。 如果我拥有数百万的设备会怎么样?

回答

1

基于此页面GCM Architectural Overview

上的信息是你的阵列,需要其REGID与“skjdfhksdfgksudghldshfgkdjfghdiugf”替换第一个元素。数组中的第二个元素是out和out失败。

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

在同一页上是

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

0

你可以阅读更多有关规范的ID在GCM Advanced Topics page明确:

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

您还可以在Response Format部分阅读更多。

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

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
    }, 
    "registration_ids": ["4", "8", "15", "16", "23", "42"] 
} 
相关问题