Python NodeJS APN推送重复通知
伙计们,我最近尝试使用nodejs作为第三方APN服务器,我正在使用node APN module()。当我在短时间内推送相同的通知(我的意思是,相同的警报)(如5分钟内推送5个通知)时,我发现苹果的APN服务器似乎“缓存”了我的通知,之后,当我正常推送另一条消息时(以正常速率,如5分钟一条消息),“缓存”消息将一次又一次地出现在我的设备上 我对node apn模块的代码进行了深入研究,发现它创建了一个TLS(SSL)到苹果,并向苹果的服务器发送了一个流数据(这是nodejs中的一个缓冲区),一切似乎都正常,但消息只是重复(当我在短时间内推送它们时)。我还尝试了Python的lib apnswraper()。代码只是做同样的事情,问题不会出现 它们发送到苹果服务器的内容完全相同,包括:Python NodeJS APN推送重复通知,python,ios,node.js,ssl,apn,Python,Ios,Node.js,Ssl,Apn,伙计们,我最近尝试使用nodejs作为第三方APN服务器,我正在使用node APN module()。当我在短时间内推送相同的通知(我的意思是,相同的警报)(如5分钟内推送5个通知)时,我发现苹果的APN服务器似乎“缓存”了我的通知,之后,当我正常推送另一条消息时(以正常速率,如5分钟一条消息),“缓存”消息将一次又一次地出现在我的设备上 我对node apn模块的代码进行了深入研究,发现它创建了一个TLS(SSL)到苹果,并向苹果的服务器发送了一个流数据(这是nodejs中的一个缓冲区),一
[命令,token.length,token.content,payload.length,payload.content]
命令、token.length和payload.length是big-endian
中的双字节无符号int。python库以格式构造整个流!HB32s58s
,32和58正好是长度!表示big-endian,H表示无符号字符(1字节),B表示无符号整数(2字节)。32s表示32字节字符串,58表示58字节字符串
nodejs-tls连接也在做同样的事情,所有长度都是用cleartextStream.writeUInt16BE()
编写的,这里的BE表示big-endian
我已经逐字节测试了它们发送的内容完全相同。我甚至创建了一个SSL服务器来接收他们的消息,我收到了相同的数据(还逐字节检查)。所以苹果的服务器收到的信息应该完全相同。但他们只是有不同的行为。我在这里等待任何建议,提前谢谢 为确保不传输两次,请尝试以下操作:
apnConnection.on('transmitted', function(notification, device) {
console.log("Notification transmitted to:" + device.token.toString('hex'));
});