node-gcm只发送1个设备的消息?

时间:2013-12-31 07:44:29

标签: android node.js

我使用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' }
    ]
}

请帮帮忙?

2 个答案:

答案 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);
});