2013-02-19 4 views
3

У меня странная проблема с APNS. Я с помощью библиотеки com.notnoop.apns и когда я пытаюсь нажать одно сообщение 40 устройств, я получилAPNS - Не удалось отправить сообщение

ApnsConnectionImpl : Failed to send message 
[email protected] 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 устройств.

Я пытаюсь разделить коллекцию с помощью токенов push от 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()); 
} 

}

Constructor службы:

try { 
     service = APNS.newService() 
       .withCert(pathToCertificate, certificatePasswd) 
       .withProductionDestination() 
       .build(); 
    } catch(IOException e){ 
     e.printStackTrace(); 
    } 

Я обед этот метод в 10 раз с различными Коллекции кнопочных лексем (коллекции получили случайные от 1 до 40 токенов), и однажды я получил это исключение (все жетоны были правильными). Можно получить сброс соединения APNS без причины? Если я потерял связь, что делать? Подключите и попробуйте нажать еще раз потерянные сообщения на устройства? Пожалуйста, помогите, из идей.

+0

Вы уверены, что все маркеры действительны? Наиболее вероятной причиной этой ошибки является то, что хотя бы один из них недопустим. Токен, действительный для среды песочницы (разработки), недействителен для производственной среды и наоборот. – Eran

+0

Да, им абсолютно уверен. Все токены, которые я получил в моей базе данных, и никто не имеет плохого формата, длины или даже не является нулевым. Я пытаюсь поймать это исключение, воссоздать объект службы и повторить попытку для ввода этих токенов, где я получаю исключение. Возможно, это сработает. –

+0

Тот факт, что все токены в вашей БД имеют правильную длину, не означает, что все они действительны. Даже если все маркеры в вашей БД были получены от Apple, они все равно могут быть недействительными, поскольку каждый токен недействителен, если используется в неправильной среде (как упоминалось в моем предыдущем коммюнике). – Eran

ответ

4

Я рекомендую библиотеку Java PNS: http://code.google.com/p/javapns/. Я использовал его в одном из моих проектов, и он отлично работает.

+0

Отличный thx pawelqus .. я меняю только библиотеку, и все начинается нормально работать. Итак, мой вопрос: почему notnoop генерирует это странное исключение для этих же токенов? –

Смежные вопросы