【问题标题】:NodeJS APN push duplicated notificationsNodeJS APN 推送重复通知
【发布时间】:2014-04-23 14:23:50
【问题描述】:

各位,我最近尝试使用 nodejs 作为第 3 方 APN 服务器,我正在使用 node-apn 模块 (https://github.com/argon/node-apn)。当我在短时间内推送相同的通知(我的意思是相同的警报)时(例如 5 分钟内的 5 个通知),我发现 Apple 的 APN 服务器似乎“缓存”了我的通知,之后,当我正常推送另一条消息(以正常速率,比如一条消息 5 分钟),“缓存”的消息会一次又一次地到达我的设备。

我对 node-apn 模块的代码进行了一些研究,发现它为苹果创建了一个 TLS(SSL),并将一个流数据(在 nodejs 中是一个缓冲区)发送到苹果的服务器,一切似乎可以,但是消息只是重复的(当我在短时间内推送它们时)。我还尝试了 Python 的 lib APNSWrapper(https://code.google.com/p/apns-python-wrapper)。代码只是做同样的事情,不会出现问题。

他们发送到苹果服务器的内容是一样的,包括:

[command, token.length, token.content, payload.length, payload.content]

command、token.length 和 payload.length 是big-endian 中的双字节无符号整数。 python lib用!HB32s58s格式构造整个流,32和58只是长度。 !表示大端,H 表示无符号字符(1 字节),B 表示无符号整数(2 字节)。 32s 表示 32 字节的字符串,58 表示 58 字节的字符串。

而nodejs tls连接也只是做同样的事情,所有的长度都是用cleartextStream.writeUInt16BE()写的,这里的BE就是big-endian。

我已经逐字节测试了它们发送的内容是一样的。我什至创建了一个 SSL 服务器来接收他们的消息,并且我收到了相同的数据(也逐字节检查)。所以苹果服务器收到的应该是完全一样的。但他们只是有不同的行为。我在这里等待任何建议,提前谢谢!

【问题讨论】:

    标签: python ios node.js ssl apn


    【解决方案1】:

    为确保您不会传输两次,请尝试以下操作:

    apnConnection.on('transmitted', function(notification, device) {
      console.log("Notification transmitted to:" + device.token.toString('hex'));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-05
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多