我使用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设备发送消息,但是当我再次向另一台设备发送消息时,消息仍然发送到第一台设备?也许我的代码没有刷新,我的node-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' }
]
}
请帮帮忙?
答案 0 :(得分:1)
假设以下内容:
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,所以你可能想检查一下。
答案 1 :(得分:0)
目前尚不清楚您在哪里声明registrationIds
数组。这应该在添加ID之前立即完成。此外,您应首先添加ID,然后发送通知(一次!),如Salem suggests。
var registrationIds = [];
items.forEach(function(item) {
registrationIds.push(obj[item].gcm_regid);
});
sender.send(message, registrationIds, 1, function (err, result) {
console.log(result);
});