#java #ios #apple-push-notifications
#java #iOS #apple-push-уведомления
Вопрос:
Приветствую,
Я создаю сервер на базе Java для создания push-уведомлений для службы APNs Apple iOS. Я нашел Javapns в Google code, который, похоже, предоставляет простую базовую платформу для связи с APNS и который, похоже, довольно широко используется.
http://code.google.com/p/javapns/
Однако, читая документы Apple, можно обнаружить, что существует «расширенный формат» для уведомлений, который поддерживает «истечение срока действия», т. е. установку времени (ну, в секундах) истечения срока действия уведомления, если оно еще не было доставлено. Я не вижу никакого способа установить это с помощью Javapns, и я не уверен, как служба APNs обрабатывает срок действия уведомлений, если вы явно не задали его. Итак,
- Кто-нибудь знает, как поддерживать расширенный формат уведомлений APNS, в частности, как установить срок действия?
- Кто-нибудь знает, как Apple обрабатывает срок действия уведомления, если он явно не установлен?
- Есть ли у кого-нибудь какие-либо предложения, которые не требуют от меня начинать с нуля, поскольку сервер в настоящее время функционирует как есть?
Заранее спасибо.
Эндрю
Ответ №1:
Недавно я внес существенный вклад в проект JavaPNS, который привел к выпуску JavaPNS 2.0 несколько дней назад. Эта версия обеспечивает полную поддержку расширенного формата уведомлений, включая возможность устанавливать собственный срок действия.
Sylvain
Ответ №2:
Приятно, что вы нашли библиотеку Java… к сожалению, вы не читали документы там.
Я опубликую некоторые из основных моментов ниже:
Существующий код использует «Простой формат уведомлений», который никогда не возвращает ошибку.
Смотрите документы по адресу: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html
Я попытался обновить до «Расширенного формата уведомлений», который должен возвращать ошибку, но я не могу получить какие-либо ошибки обратно из APNS. (также по ссылке выше)
Благодаря расширенному формату соединение не прерывается сразу после отправки данных, но я ничего не получаю обратно от моего вызова socket.getInputSocket.read().
Эту проблему придется отложить до тех пор, пока у меня не появится больше времени для устранения неполадок.
(Кто-то еще прокомментировал) Большое спасибо, что изучили это. Я получил тот же результат, что и ваш. Возможно, это как-то связано с Apple Gateway.
Итак … вы могли бы: 1) Создать свой собственный 2) Помочь улучшить существующую библиотеку 3) Попробовать другую библиотеку, например:https://github.com/notnoop/java-apns 4) Ничего не делать
Комментарии:
1. Где в документах Javapns говорится что-нибудь о расширенном формате? Я, конечно, этого не видел. Документы, на которые вы предоставили ссылку, принадлежат Apple, а не Javapns. Обнаружена ошибка с запросом поддержки, но она еще не была принята или запущена, когда я отправлял этот вопрос. Очевидно, я знаю, что в настоящее время они это не поддерживают, иначе я бы не опубликовал вопрос. И что это за snark?
2. Не читая больше, я решил вместо этого попробовать Java-APNS. Это работает, срок действия истекает, и автор намного полезнее, чем javapns. По крайней мере, по моему опыту.
Ответ №3:
Расширенная поддержка ios здесь. Чтобы отправить уведомление, вы можете сделать это в три шага:
Настройте соединение
ApnsService service =
APNS.newService()
.withCert("/path/to/certificate.p12", "MyCertPassword")
.withSandboxDestination()
.build();
Создайте и отправьте сообщение
String payload = APNS.newPayload().alertBody("Can't be simpler than this!").build();
String token = "fedfbcfb....";
service.push(token, payload);
Чтобы запросить службу обратной связи для неактивных устройств:
Map<String, Date> inactiveDevices = service.getInactiveDevices();
for (String deviceToken : inactiveDevices.keySet()) {
Date inactiveAsOf = inactiveDevices.get(deviceToken);
...
}