从 app-Engine 上的 java 类向 Android 客户端发送 PUSH 通知

Posted

技术标签:

【中文标题】从 app-Engine 上的 java 类向 Android 客户端发送 PUSH 通知【英文标题】:Send PUSH Notification to Android Client from java class on app-Engine 【发布时间】:2012-01-18 09:23:12 【问题描述】:

我需要从我的 java 类向 android 客户端发送 PUSH 通知。该类是使用 url 提供的指南编写的:http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html(第 2.4 节 - 发送消息)这在 JBOSS 和 Weblogic 等标准应用程序服务器上运行良好。

但是需要将应用程序移至 google app-engine,但该类引发编译错误:“GAE 的 Java 运行时环境不支持类 javax.net.ssl.HostnameVerifier”。 'SSLSession' 类也会抛出类似的错误。

有没有办法克服这个问题?或者还有其他方法可以从应用引擎上运行的 Java 类发送 PUSH 通知吗?

谢谢, 维奈

【问题讨论】:

【参考方案1】:

无法直接克服,这意味着您无法让这些类在 GAE 上运行。至于解决方案,我不确定您为什么要使用自定义 HostnameVerifier,因此请尝试不使用它:使用 HttpURLConnection 而不是 HttpsURLConnection 并删除所有“hostnameVerifier”部分。

编辑:您也可以使用 App Engine 的fetch API,这是肯定支持的。

【讨论】:

感谢 Viruzzo 的回复...我将其更改为 HttpURLConnection 并删除了扩展 HostNameVerifier 的私有类,但在运行时出现新错误,提示 java.lang.NoClassDefFoundError: javax.net.SocketFactory is a限制类。有关详细信息,请参阅 Google App Engine 开发人员指南。方法执行时。可能是因为 GAE 不完全支持套接字?不知道有没有其他方法可以在 GAE 上实现 Java 的 PUSH? 它把它扔到哪里去了?您链接的代码中没有明确引用它。您只需要对 C2DM 服务器进行简单的 POST 即可进行推送,因此它应该与 GAE 上的 HttpURLConnection 完美配合。【参考方案2】:

关于您的问题Is there is any other way to send PUSH notifications from Java classes running on the app-engine?,答案是肯定的,Beaconpush 或Spire.io 等第三方服务可以很好地与应用引擎集成,并且在某些情况下与使用相比在成本方面可能便宜得多App Engine 频道 API。

【讨论】:

您好 Ibrahim,您能否确认它们是否可以插入 Java 类?要求是从在 App-Engine 上运行的 Java 类发送 PUSH 通知。 他已经在使用谷歌的C2DM,这和那两个服务完全一样;他在访问服务时遇到问题,他不想(也不应该)实施推送服务。 @Viruzzo:我回答了他的有效问题,并为他的考虑提供了有效的替代方案,为什么需要投反对票? Vinay:你可以使用他们的 REST API 通过 URLFetch API 推送消息,这就是我在我的应用程序上所做的。

以上是关于从 app-Engine 上的 java 类向 Android 客户端发送 PUSH 通知的主要内容,如果未能解决你的问题,请参考以下文章

App-Engine (Java) 文件上传

python app-engine django 1.2上的TemplateDoesNotExist,同时模板呈现绝对路径

java 父类向子类转型的问题

HTTP ERROR: 503 当我在本地运行 app-engine

Java_基础Java中强制类型转换

当 UITextField 被填充时,从一个类向视图控制器发送信号或触发函数