我无法通过公司代理向设备发送消息 我已经在google网站上完成了GCM教程,并且已经使用android模拟器在google服务器上成功注册了一个设备, 还有我最后的服务器 为此,我必须通过公司代理,将其设置在模拟器的访问点。 现在我遇到的问题是通过相同的代理从我的服务器向设备发送消息。 我正在使用演示中使用
的servlet代码com.google.android.gcm.server.Sender
帮助类发送消息。
我在tomcat 7上运行servlets。
我已尝试在catalina.properties文件中设置代理,就像这样。
http.proxyHost=proxy.company.com
http.proxyPort=8080
我已尝试在servlet中设置属性,如下所示。
System.setProperty("http.proxyHost", "proxy.company.com");
System.setProperty("http.proxyPort", "8080");
但我仍然得到超时。 我知道它的公司代理,因为我得到了消息在家里工作,我没有代理。
我已经看到在java代码中创建了一个代理对象,然后用它创建了一个连接,但我不认为这是可用的,因为我使用Sender helper类来发送消息。
这是超时失败的行。
Result result = sender.send(message, registrationId, 5);
任何帮助都将不胜感激。
此致
比尔
答案 0 :(得分:8)
好吧,我终于有了它的工作。在我的评论中,我提到我已成功发送消息,但模拟器没有收到它。我忘了按照我之前的建议,从命令行运行模拟器,代理参数设置如下:
emulator.exe -avd avd22google -http-proxy proxy.company.com:8080 -debug-proxy
总而言之,我最初的问题是我在使用GCM和我的本地服务器上注册了模拟器,但是当我点击发送消息时我得到了超时。
我最初认为这是防火墙,所以我做了一些研究并在tomcats catalina.properties文件中设置了代理。 这没什么区别。
我使用了" Charles" Web代理调试器软件,用于查看邮件尝试发送到的位置,并提供https://android.googleapis.com:443
所以我最初将以下内容添加到我的catalina.properties文件中:
https.proxyHost=proxy.company.com
https.proxyPort=443
它仍然无效。我的一位同事告诉我,我们的公司代理通过端口8080处理所有类型的请求,所以我将poort行更改为:
https.proxyPort=8080
这允许发送消息。 但后来消息没有通过模拟器,我在LogCat中收到以下错误。
[GTalkConnection.12] doConnect: caught XMPPError connecting to mtalk.google.com:5228.: -- caused by: java.net.SocketException: The operation timed out
然后我记得您需要使用命令行启动模拟器以使其使用代理。一旦我这样做,我的模拟器上就出现了大量的消息!
所以我终于让它端到端地工作了。我花了大约一个星期的时间让GCM在公司的防火墙内完全工作,所以希望这篇文章可以帮助其他一些可怜的人在将来做这件事。
欢呼声
比尔