APNS - 无法发送消息

时间:2013-02-19 22:24:16

标签: java ios push-notification apple-push-notifications

我遇到了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中推送此通知,但是第二次尝试我得到同样的问题。

这是带推送方法的代码:

//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();
    }

我用不同的推送令牌集合午餐这个方法10次(集合从1到40个令牌随机),有一次我得到了这个例外(所有令牌都是正确的)。 APNS可以无缘无故地重置连接吗?如果我失去联系,假设该怎么办?重新连接并尝试再向设备发送一次丢失的消息?请帮助,我的想法。

2 个答案:

答案 0 :(得分:4)

我推荐Java PNS库:http://code.google.com/p/javapns/。我在我的一个项目中使用它并且工作正常。

答案 1 :(得分:1)

您的数据库中可能包含无效的设备令牌。

以下是一些可以帮助您的类似问题:

Validating Device Tokens

Another One

One More

Last One

此外,您应该阅读这篇关于the problem with Apple Push Notification Service的精彩文章。