Как использовать Javapns для поддержки расширенного формата уведомлений Apple

#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 обрабатывает срок действия уведомлений, если вы явно не задали его. Итак,

  1. Кто-нибудь знает, как поддерживать расширенный формат уведомлений APNS, в частности, как установить срок действия?
  2. Кто-нибудь знает, как Apple обрабатывает срок действия уведомления, если он явно не установлен?
  3. Есть ли у кого-нибудь какие-либо предложения, которые не требуют от меня начинать с нуля, поскольку сервер в настоящее время функционирует как есть?

Заранее спасибо.

Эндрю

Ответ №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);
    ...
}