Node.js GCM 推送通知允许的 ID 数量?

Posted

技术标签:

【中文标题】Node.js GCM 推送通知允许的 ID 数量?【英文标题】:Node.js GCM Push Notification number of IDs allowed? 【发布时间】:2014-08-29 13:31:39 【问题描述】:

我进行了一些搜索,但找不到此问题的答案,如果重复,请见谅。

我正在使用 Node.JS 向 android 设备发送 GCM 通知。我在数组中传递注册 ID 列表,然后通过 Sender.send 函数发送它。我想知道,每个发送请求允许的 ID 数量是否有最大限制?就像 send 函数中每次调用 1000 次一样,或者不存在这样的限制?

我记得读过有关使用 JSON 格式一次发送多达 1000 个 ID 的文章,这适用于 Node.JS 中的 node-gcm 模块吗?

提前致谢。

【问题讨论】:

【参考方案1】:

GCM 服务器将接受最多包含 1000 个注册 ID 的请求。如果超过 1000 个,则必须将它们拆分为多个请求。

因此,您的问题的答案取决于您调用的代码是否为您进行了这种拆分。

【讨论】:

没有说明node-gcm是否自动进行拆分,所以我得试试看。每当我测试它时,我都会更新这个答案,感谢您指出我正确的方向。【参考方案2】:

node-gcm 不允许一次发送到 1,000 台以上的设备。

请注意,您一次最多可以向 1000 个注册 ID 发送通知。这是由于 GCM API 方面的限制。

https://github.com/ToothlessGear/node-gcm/issues/42

您可以像这样轻松地将令牌分成批次:

// Max devices per request    
var batchLimit = 1000;

// Batches will be added to this array
var tokenBatches = [];

// Traverse tokens and split them up into batches of 1,000 devices each  
for (var start = 0; start < tokens.length; start += batchLimit) 
    // Get next 1,000 tokens
    var slicedTokens = tokens.slice(start, start + batchLimit);

    // Add to batches array
    tokenBatches.push(slicedTokens);


// You can now send a push to each batch of devices, in parallel, using the caolan/async library
async.each(batches, function (batch, callback) 
    // Assuming you already set up the sender and message
    sender.send(message,  registrationIds: batch , function (err, result) 
        // Push failed?
        if (err) 
            // Stops executing other batches
            return callback(err);
        

        // Done with batch
        callback();
    );
, function (err) 
    // Log the error to console
    if (err) 
        console.log(err);
    
);

【讨论】:

以上是关于Node.js GCM 推送通知允许的 ID 数量?的主要内容,如果未能解决你的问题,请参考以下文章

node-fcm:为所有设备发送推送通知

是否可以要求 GCM 服务器无法向过期/过时的注册 ID 推送通知?

gcm 一次可以接收多少个设备推送消息

PushSharp 是不是允许向 GCM for iOS 发送通知?

(GCM - MISMATCH SENDER ID) 使用多个推送服务时

如何使用 Java GCM API 在 android 设备上获取失败推送通知的注册 ID