android - send downstream message to google ccs with node js -


i using node-xmpp connect google gcm ccs servers. followed from gcm google groups connect. need send downstream message whenever receive message redis subscriber(i subscribed redis channel redis node package). code follows

var gearmanode = require('gearmanode'); var redis = require("redis"); var xmpp = require('node-xmpp');  var gearjob; var redissubchan = 'test_channel'; var gearmanjobname = 'reverse'; var jobpayload; var redisclient; var xmppclient; var gearclient;  gearclient = gearmanode.client();  var options = {     type: 'client',     jid: 'myid@gcm.googleapis.com',     password: 'myserverkey',     port: 5235,     host: 'gcm.googleapis.com',     legacyssl: true,     preferredsaslmechanism: 'plain' };  console.log('creating xmpp app');  xmppclient = new xmpp.client(options);  xmppclient.connection.socket.settimeout(0) xmppclient.connection.socket.setkeepalive(true, 10000)  redisclient = redis.createclient(); redisclient.subscribe(redissubchan);  redisclient.on("message", function(channel, message) {     console.log('received message');     console.log(message);     message = json.parse(message);     //send messages google ccs server via xmpp     var payload = {         "to": message.to,         "message_id": message.message_id,         "data": message.data,         "time_to_live": message.time_to_live,         "delay_while_idle": message.delay_while_idle     };     var jsonpayload = json.stringify(payload);     console.log(jsonpayload);      var acktodevice = new xmpp.element('message', {'id': ''}).c('gcm', {xmlns: 'google:mobile:data'}).t(jsonpayload);     console.log('prepared message');     console.log(acktodevice.root().tostring());     xmppclient.send(acktodevice);     console.log('sent!!!'); });  xmppclient.on('online', function() {     console.log("online"); });  xmppclient.on('connection', function() {     console.log('online'); });  xmppclient.on('stanza',         function(stanza) {             if (stanza.is('message') && stanza.attrs.type !== 'error') {                 // best ignore error                 console.log("message received");                 //message format per here: https://developer.android.com/google/gcm/ccs.html#upstream                 var messagedata = json.parse(stanza.getchildtext("gcm"));                  if (messagedata && messagedata.message_type != "ack" && messagedata.message_type != "nack") {                      var ackmsg = new xmpp.element('message', {'id': ''}).c('gcm', {xmlns: 'google:mobile:data'}).t(json.stringify({                         "to": messagedata.from,                         "message_id": messagedata.message_id,                         "message_type": "ack"                     }));                     //send ack.                     xmppclient.send(ackmsg);                     console.log("sent ack");                     //receive messages ccs , give php workers                     gearclient.submitjob(gearmanjobname, json.stringify(messagedata), {background: true});                  } else {                     //need more here nack.                     console.log("message ack or nack...discarding");                 }              } else {                 console.log("error");                 console.log(stanza);             }          });  xmppclient.on('authenticate', function(opts, cb) {     console.log('auth' + opts.jid + ' -> ' + opts.password);     cb(null); });  xmppclient.on('error', function(e) {     console.log("error occured:");     console.error(e);     console.error(e.children); }); 

i able receive messages ccs server can not send downstream message redis on message callback.

i following error

error { name: 'message',   parent: null,   attrs:     { id: '',      type: 'error',      to: '1026645507924@gcm.googleapis.com/8df23ed7',      'xmlns:stream': 'http://etherx.jabber.org/streams' },   children:     [ { name: 'gcm',        parent: [circular],        attrs: [object],        children: [object] },      { name: 'error',        parent: [circular],        attrs: [object],        children: [object] } ] } 

i tried print(followed node xmpp) xmpp stanza before sending , same

//log of message

<message id=""><gcm xmlns="google:mobile:data">{"to":"apa91bhigzcbepz-f1jsywqkbajmhorhjiwgtn1gwitzchf6uyvoz3k7aasuib-vbix32ucsypin3xdtymoxqsc_zmtdtukjudq8bpqlpc41sqyrimm-hn34zjsaf4uqo0op1lsbquxjh2wf0k5n4kyd3-vn8ghasq","message_id":84,"data":{"test":"sample data send"},"time_to_live":0,"delay_while_idle":false}</gcm></message> 

as mentioned in documentation(request format). wrong code ?

i had same issue. drove me crazy in end invalid json format error.

i suppose messagedata.from or messagedata.message_id wasn't converted correct json format. in case passed scalar , json.stringify() didn't converted string. hence result --> "message_id": 1234 , not "message_id": "1234"


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -