簡體   English   中英

NodeJS APN推送重復的通知

[英]NodeJS APN push duplicated notifications

伙計們,我最近正在嘗試將nodejs用作第三方APN服務器,並且正在使用node-apn模塊( https://github.com/argon/node-apn )。 當我在短時間內推送相同的通知(我的意思是相同的警報)(例如在5分鍾內發送5條通知)時,我發現蘋果的APN服務器似乎在此之后“緩存”了我的通知正常推送另一條消息(以正常速度,例如每條消息5分鍾),“緩存的”消息將一次又一次地到達我的設備。

我研究了node-apn模塊的代碼,發現它為蘋果創建了一個TLS(SSL),並向蘋果的服務器發送了一個流數據(在nodejs中是一個Buffer),似乎一切正常,但消息只是重復的(當我在短時間內推送它們時)。 我還嘗試了Python的lib APNSWrapper( https://code.google.com/p/apns-python-wrapper )。 該代碼只是做同樣的事情,並且不會出現問題。

他們發送到蘋果服務器的內容是相同的,包括:

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

命令,token.length和payload.length是big-endian的雙字節unsigned int。 python lib以!HB32s58s格式構造整個流,其中32和58只是長度。 表示big-endian,H表示無符號char(1字節),B表示無符號int(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'));
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM