3

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 によって接続をリセットすることは可能ですか? 接続が失われた場合、どうすればよいですか? 再接続して、失われたメッセージをデバイスにもう一度プッシュしてみますか? 助けてください、アイデアがありません。

4

2 に答える 2

4

Java PNSライブラリをお勧めします:http ://code.google.com/p/javapns/ 。私は自分のプロジェクトの1つでそれを使用しましたが、正常に動作します。

于 2013-02-21T09:55:20.443 に答える
1

DBに無効なデバイストークンがある可能性があります。

ここにあなたを助けることができるいくつかの同様の質問があります:

デバイストークンの検証

もう一つ

もう1つ

最後の一つ

さらに、Apple PushNotificationServiceの問題に関するこのすばらしい記事を読む必要があります。

于 2013-02-21T02:11:02.177 に答える