皆さん、私は最近nodejsをサードパーティのAPNサーバーとして使用しようとしており、node-apnモジュール( https://github.com/argon/node-apn )を使用しています。同じ通知 (つまり、同じアラート) を短時間 (5 分間で 5 つの通知など) にプッシュすると、Apple の APN サーバーが私の通知を「キャッシュ」したように見えることがわかりました。通常どおり別のメッセージをプッシュすると (メッセージ 5 分などの通常の速度で)、「キャッシュされた」メッセージがデバイスに何度も届きます。
node-apn モジュールのコードを少し掘り下げたところ、Apple への TLS(SSL) が作成され、ストリーム データ (nodejs のバッファ) が Apple のサーバーに送信されることがわかりました。すべて問題ないようです。 、しかし、メッセージは複製されただけです(短時間でプッシュした場合)。また、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 は 2 バイトの unsigned int ですbig-endian
。python lib は format!HB32s58s
でストリーム全体を構築します。32 と 58 は単なる長さです。! はビッグエンディアン、H は unsigned char(1 バイト)、B は unsigned int(2 バイト) を意味します。32s は 32 バイトの文字列を意味し、58 は 58 バイトの文字列を意味します。
そして、nodejs tls 接続は同じことを行っているだけです。すべての長さは で書かれていcleartextStream.writeUInt16BE()
ます。ここでの BE はビッグエンディアンを意味します。
私はバイトごとにテストして、送信するものがまったく同じであることを確認しました。メッセージを受信するためにSSLサーバーを作成し、同じデータを受信しました(バイトごとにチェックしました)。したがって、アップルのサーバーが受信したものはまったく同じである必要があります。しかし、彼らは異なる行動をとっているだけです。私はここで何か提案を待っています、事前に感謝します!