谷歌日历推送通知:正确的域验证和注册,但无法接收通知



我面临谷歌日历推送通知的问题。首先,我想解释一下我的情景。

我正在尝试开发一个java应用程序,将其集成到一个处理传感器和执行器的平台中。该应用程序的目标是使用Google日历API和推送通知来跟踪特定类型的事件。我的第一个";架构";我选择了以下内容(鉴于我作为开发人员的年轻经验,我愿意接受建议和批评;-):

  1. 一个简单的Tomcat Servlet,它将成为Google Servers(A)的最后一个webhook
  2. 一个java类,它实现了一个简单的服务器客户端套接字(B)
  3. 使用Google Calendar API并通过其方法之一接收推送消息的java类(C)

这种结构背后的逻辑(可能效率不高)是,谷歌服务器向我的Tomcat webhook发送通知,同时它也是我的Socket通道的客户端。当它收到推送时,它会完成自己的工作并警告套接字服务器。后者由于有一个静态对象,调用了一个C的方法。这个类将使用GoogleAPI来检查发生了什么。

第一个也是强制性的研究资源是:https://developers.google.com/google-apps/calendar/v3/push

我已经能够完成步骤1:使用Webmaster工具验证您是否拥有域,并正确添加我的域以进行推送通知,如所示步骤2:注册您的域

在这两个步骤中,谷歌是否会检查列出的域是否具有有效的SSL证书

我的域名有点像";domain.com";并且到达webhook的完整URL是hhttps://ab.domain.com/app/notifications.谷歌文档中有一个非常重要的注释:

请注意,Google日历API将能够向其发送通知>HTTPS地址,仅当您的网站上安装了有效的SSL证书时>服务器无效证书包括:

  • 自签名证书
  • 由不受信任的源签名的证书
  • 已吊销的证书
  • 主题与目标不匹配的证书主机名

首先,我根据官方文档将Tomcat配置为启用SSL和HTTPS:Tomcat.apache.org/Tomcat-6.0-doc/sl-howto.html。现在我可以通过HTTPS访问Tomcat和我的servlet。

问题是我不能收到";正确地";推送通知。通过使用一个模拟Http/Https请求的浏览器插件,我可以很容易地访问我的Tomcat webhook,这个插件正确地警告了我的Java应用程序。因此,由于我几乎可以排除有关Socket通道的问题,所以我将重点放在Google服务器和Tomcat webhook之间的通信上。我使用Wireshark来查看通过8443端口(Tomcat的https)从Google传入的流量。显然是加密的,所以我不能检查很多,但很多数据包都被标记为PSH(推送)。然而,他们似乎有一个有效载荷,根据谷歌文档的说法,他们不应该这样做,因为推送通知只是带有头部信息的数据包。

所以我的第一个疑问是关于证书。我没有,所以我使用Verisign.com的试用版(顺便说一句,Tomcat文档中建议启用SSL)

第二个疑问是关于验证和注册程序。尽管我已经做到了,谷歌也接受了ab.domain.com/app/nootifications域作为webhook,但我没有工具来证明一切都是正确的。

我在Stackoverflow中发现了以下帖子:;无法接收Google日历的推送通知"日历推送通知到java应用程序引擎后端servlet"谷歌日历推送通知手表命令";我已经验证了不同的答案和建议,没有任何变化。

我错过了什么?非常感谢,我将感谢任何提示、提示、答案、指针:-)

如果您试图调试webhook,无论是出于机制(即发送方的正确设置)还是正确性(检查后负载),都可以尝试使用RequestBin。如果可能,请同时注册RequestBin URL和您想要的目的地URL。RequestBin会让你完全了解有效载荷是什么,并保证你已经在发送者(谷歌)端正确设置了内容。

您将需要一个有效的SSL证书。不允许自签名。