Node.js xmpp 客户端收到“BAD_REGISTRATION”错误作为消息响应

Posted

技术标签:

【中文标题】Node.js xmpp 客户端收到“BAD_REGISTRATION”错误作为消息响应【英文标题】:Node.js xmpp client gets "BAD_REGISTRATION" error as message response 【发布时间】:2016-01-15 14:17:02 【问题描述】:

这段代码可能有什么问题?我正在尝试向我的移动设备发送推送通知。到目前为止没有运气.. 用 php 做了一个小测试,并使用 GCM HTTP 协议来了解我的 API 和密码是否正确 - 一切都像一个魅力.. 这是我的代码 sn-p 不工作。

var xmpp = require('node-xmpp-client');
var ltx = require('ltx');

var options = 
  jid: 'xxxxxxxxxxx@gcm.googleapis.com',
  password: 'AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  port: 5235,
  host: 'gcm.googleapis.com',
  legacySSL: true,
  preferredSaslMechanism: true
;

var xmppClient = new xmpp.Client(options);
xmppClient.connection.socket.setTimeout(0);
xmppClient.connection.socket.setKeepAlive(true, 10000);
xmppClient.on('online', function() 
  var receiver = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxx-GnbkL2e5UlsS4utMw9rLTFrcsrhqxeH8xvzzzzzzzzzzzzzzzzzzzzzzz";
  /*var rawmsg = '<message id=""><gcm xmlns="google:mobile:data">"to":"' + receiver + '", "message_id":"m-xxxx123", "data": "hello":"world", "time_to_live":600, "delay_while_idle": true, "delivery_receipt_requested": true </gcm></message>';
  var msg = ltx.parse(rawmsg);*/

  var msg = new xmpp.Element('message', id: '').c('gcm', xmlns: 'google:mobile:data').t(JSON.stringify(
    to: receiver,
    message_id: 'm-xxxx123',
    time_to_live: 600,
    delay_while_idle: true,
    delivery_receipt_requested: true
  ));
  xmppClient.send(msg);
  ............
  ............

这就是 'stanza's 事件的回应。

........","message_id":"m-xxxx123","error":"BAD_REGISTRATION","error_description":""' ],

【问题讨论】:

【参考方案1】:

根据documentation,这里是您的错误的可能原因。

注册令牌无效

检查您传递给服务器的注册令牌的格式。确保它与客户端应用从 GCM 注册时收到的注册令牌匹配。不要截断或添加其他字符。

发件人不匹配

注册令牌与特定的发件人组相关联。当客户端应用注册 GCM 时,它必须指定允许哪些发件人发送消息。在向客户端应用程序发送消息时,您应该使用其中一个发件人 ID。如果您切换到其他发件人,现有的注册令牌将不起作用。

【讨论】:

以上是关于Node.js xmpp 客户端收到“BAD_REGISTRATION”错误作为消息响应的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 node.js 和 node-xmpp 连接到 GTalk

无法使用 Node.js + XMPP 接收上游 GCM 消息

为啥选择 XMPP 而 Node.js 和 WebSocket 都可用? [关闭]

node.js, XMPP Strophe.js

XMPP BOSH 预绑定返回 SID 和 RID 的 Node.js 解决方案

套接字、xmpp 和对 node.js 的轮询 - 高性能和服务器友好