APNSで奇妙な問題が発生しました。com.notnoop.apns ライブラリを使用していますが、同じメッセージを 40 台のデバイスにプッシュしようとすると、
ApnsConnectionImpl : Failed to send message
com.notnoop.apns.EnhancedApnsNotification@be443877... trying again
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
...
同じメッセージを4、10、さらには15のデバイスにプッシュしようとすると、すべてうまくいきます。
コレクションをプッシュ トークンで 40 から 4*10 に分割し、この通知を foreach にプッシュしようとしましたが、2 回目の試行で同じ問題が発生しました。
これは push メソッドを使用したコードです。
//prepared collection and message
private void sendMessage(Collection<String> ids, PayloadBuilder message) {
try{
service.push(ids, message.build);
}catch(Exception e) {
logger.debug("APNS ERROR : size of collection - " + ids.size());
}
}
サービスのコンストラクタ:
try {
service = APNS.newService()
.withCert(pathToCertificate, certificatePasswd)
.withProductionDestination()
.build();
} catch(IOException e){
e.printStackTrace();
}
このメソッドをプッシュ トークンのさまざまなコレクション (コレクションは 1 から 40 トークンまでランダムに取得) で 10 回ランチし、1 回はこの例外を取得しました (すべてのトークンが正しかった)。理由もなく APNS によって接続をリセットすることは可能ですか? 接続が失われた場合、どうすればよいですか? 再接続して、失われたメッセージをデバイスにもう一度プッシュしてみますか? 助けてください、アイデアがありません。