Google cloud messaging GCM through proxy
android, google-cloud-messaging
Solution
Alright, I finally have it working. In my comment I mentioned that I had succeeded in sending out the message, but the emulator was not recieving it. I had forgotten to follow my own earlier advice and run the emulator from the command line with the proxy parameters set like so:
emulator.exe -avd avd22google -http-proxy proxy.company.com:8080 -debug-proxy
So to summarise, my initial problem was that I had registered the emulator on the with GCM and with my local server, but the when I clicked send message I was getting a timeout.
I initially thought it was the firewall so I did some research and set up the proxy in tomcats catalina.properties file. This made no difference.
I used the "Charles" web proxy debugger software to see where the message was attempting to be sent to and it came up with https://android.googleapis.com:443
So I initially I added the following to my catalina.properties file:
https.proxyHost=proxy.company.com
https.proxyPort=443
It still did not work. A colleague of mine told me that our company proxy handles all types of requests through port 8080, so I changed the the poort line to:
https.proxyPort=8080
This allowed the message to be sent out. But then the message was not getting through to the emulator and I was receiving the following error in LogCat.
[GTalkConnection.12] doConnect: caught XMPPError connecting to mtalk.google.com:5228.: -- caused by: java.net.SocketException: The operation timed out
Then I remembered that you need to start the emulator with the command line to get it to use the proxy. Once I did this a flood of messages appeared on my emulator!
So I finally have it working end to end. It's taken me about a week to get GCM fully working within my company firewall, so hopefully this post can help some other poor sod doing this in the future.
cheers
Bill
Problem
I am having trouble sending a message to a device through the company proxy. I have done the GCM tutorial on the google site and have successfully registered a device on the google servers with the android emulator, and also on the server at my end. For this I had to go through the company proxy, setting it in the access point of the emulator. Now the problem I have is sending a message from my server to the device through the same proxy. I am using the servlet code from the demo which uses the ``` com.google.android.gcm.server.Sender ``` helper class to send the message. I am running the servlets on tomcat 7. I have tried setting the proxy up in the catalina.properties file like so. ``` http.proxyHost=proxy.company.com http.proxyPort=8080 ``` And I have tried setting properties inside the servlet itself like below. ``` System.setProperty("http.proxyHost", "proxy.company.com"); System.setProperty("http.proxyPort", "8080"); ``` But still I get the timeout. I know its the company proxy because I got the messaging working at home where I have no proxy. I have seen a proxy object created in the java code and then a connection created with it, but I dont think that is usable here since I am using Sender helper class to send the message. This is the line that fails in a timeout. ``` Result result = sender.send(message, registrationId, 5); ``` Any help would be appreciated. Regards Bill