节点gcm发送消息只有1设备?

我使用node-gcm将消息发送到Android设备,发送消息到1设备时一切正常。

var message = new gcm.Message({ collapseKey: 'demo', delayWhileIdle: true, timeToLive: 3, data: { price: 'message' } }); message.collapseKey = 'demo'; message.delayWhileIdle = true; message.timeToLive = 3; getGcmIdFromDB(ka,function(dat){ var obj = JSON.parse(JSON.stringify(dat)); var items = Object.keys(obj); items.forEach(function(item) { registrationIds.push(obj[item].gcm_regid); sender.send(message, registrationIds, 1, function (err, result) { console.log(result); }); }); }); 

我的脚本成功发送消息给客户端的Android设备,但是当我再次发送消息给另一个设备时,消息仍然发送到第一个设备? 也许我的代码不刷新,我的节点-GCM结果这个日志。

 { multicast_id: 7032530745780722000, success: 3, failure: 0, canonical_ids: 0, results: [ { message_id: '0:1388475224605981%f11e78b0002efde3' } { message_id: '0:1388475224605981%f11e78b0002efde3' } { message_id: '0:1388475224605981%f11e78b0002efde3' } ] } 

请帮忙?

假设如下:

 items = [{gcm_regid: 1}, {gcm_regid: 2}, {gcm_regid: 3}]; 

你的代码可以做的是首先发送一个通知给设备1,然后通知设备1和2,最后通知设备1,2和3。

可能你想要做的就是一次指定所有的id *:

 items.forEach(function(item) { registrationIds.push(obj[item].gcm_regid); } sender.send(message, registrationIds, 1, function (err, result) { console.log(result); }); 

另外, registrationIds声明/初始化dos不会出现在你的代码中,所以在你使用之前检查它是否正确初始化:

 getGcmIdFromDB(ka,function(dat){ var obj = JSON.parse(JSON.stringify(dat)); var items = Object.keys(obj); var registrationIds = []; items.forEach(function(item) { registrationIds.push(obj[item].gcm_regid); } sender.send(message, registrationIds, 1, function (err, result) { console.log(result); }); }); 

*)如果我没有错,你只能在每个send呼叫中指定1000个ID,所以你可能要检查。

目前还不清楚你在哪里声明registrationIds数组。 这应该在添加id之前立即完成。 另外,您应该先添加ID,然后发送通知(一次!),就像Salem所build议的那样 。

 var registrationIds = []; items.forEach(function(item) { registrationIds.push(obj[item].gcm_regid); }); sender.send(message, registrationIds, 1, function (err, result) { console.log(result); });