Я столкнулся с проблемой с уведомлениями Google Calendar Push. Сначала я хотел бы объяснить свой сценарий.
Я пытаюсь разработать приложение java для интеграции в платформу, которая обрабатывает датчики и исполнительные механизмы. Цель этого приложения - использовать API календаря Google и Push Notifications для отслеживания определенных событий. Моя первая "архитектура", которую я выбрал, следующая: я открыт для предложений и критики, учитывая мой молодой опыт как разработчика ;-):
Логика (возможно, не столь эффективная) за этой структурой заключается в том, что серверы Google отправляют уведомления на мой веб-сайт Tomcat, который в то же время является клиентом моего канала Socket. Когда он получает нажатие, он выполняет свою работу и предупреждает о Socket Server. Последний, благодаря статическому объекту, вызывает метод C. Этот класс будет использовать API Google, чтобы проверить, что произошло.
Первый и обязательный ресурс для изучения: https://developers.google.com/google-apps/calendar/v3/push
Я смог выполнить Шаг 1. Убедитесь, что вы владеете доменом с помощью Инструментов для веб-мастеров и правильно добавляете мой домен для push-уведомлений, как указано в шаге 2: Зарегистрируйте свой домен. Эти два шага приводят меня к моему первому вопросу:
Проверяет ли Google, имеют ли перечисленные домены действительные SSL-сертификаты в течение этих двух шагов?
Мой домен - это что-то вроде "domain.com", и полный URL-адрес для доступа к веб-узлу - hhttps://ab.domain.com/app/notifications. В документации Google очень важно отметить:
Обратите внимание, что API Календаря Google сможет отправлять уведомления на этот> HTTPS-адрес только в том случае, если на вашем веб-сервере установлен действительный сертификат SSL. Недопустимые сертификаты:
- Самоподписанные сертификаты.
- Сертификаты, подписанные ненадежным источником.
- Сертификаты, которые были отозваны.
- Сертификаты, у которых есть объект, который не соответствует целевому имени хоста.
Во-первых, я настроил Tomcat для включения SSL и HTTPS после официальной документации: tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html. Теперь я могу получить доступ к tomcat и моему сервлету через https.
Проблема в том, что я не могу получить "правильные" push-уведомления. Используя плагин браузера для имитации запроса Http/Https, я могу легко получить доступ к веб-узлу Tomcat, и он правильно предупреждает мое приложение Java. Поэтому, поскольку я почти исключаю проблемы с каналом Socket, я сосредоточен на связи между серверами Google и моим веб-узлом Tomcat. Я использую Wireshark для просмотра входящего трафика из Google через порт 8443 (https для Tomcat). Очевидно, что зашифрован, поэтому я не могу проверить много, но многие пакеты отмечены как PSH (push). Однако они, похоже, имеют полезную нагрузку, которая, согласно документу Google, не должна, потому что push-уведомления - это всего лишь пакеты с информацией о заголовках.
Поэтому мое первое сомнение касается сертификата. У меня его нет, поэтому я использую этот пробный вариант от Verisign.com (который, кстати, предлагается в документации Tomcat для включения SSL)
Самое второе сомнение касается процедуры проверки и регистрации. Несмотря на то, что мне удалось это сделать, и Google принимает домен ab.domain.com/app/notifications как webhook, у меня нет инструментов, чтобы доказать, что все правильно.
Я нашел следующее сообщение в Stackoverflow: "Не удалось получить push-уведомление для календаря Google", "Уведомление о нажатии календаря на сервер Java-сервера", "Наблюдательная команда Google Calendar Push Notification". Я уже проверил ответы разных сторон и предложений и ничего не изменилось.
Что мне не хватает? Большое спасибо, я был бы благодарен за любой отзыв, подсказку, ответ, указатель :-)
Вам понадобится действительный SSL-сертификат. Самоподписанные не допускаются.
Если вы пытаетесь отлаживать веб-хоккей, либо для механики (т.е. правильной настройки на стороне отправителя), либо для правильности (для проверки почтовой полезной нагрузки), попробуйте использовать RequestBin. Если возможно, зарегистрируйте URL-адрес RequestBin вместе с вашим целевым URL-адресом. RequestBin даст вам полную информацию о том, что представляет собой полезная нагрузка, а также дайте заверения в том, что вы правильно настроили на стороне отправителя (Google).