2012-07-12 5 views
7

Ich habe Probleme beim Senden einer Nachricht an ein Gerät über den Firmen-Proxy.
Ich habe das GCM-Tutorial auf der Google-Website getan und erfolgreich ein Gerät auf den Google-Servern mit dem Android-Emulator, und auch auf dem Server an meinem Ende registriert.
Dafür musste ich den Firmen-Proxy durchlaufen und ihn im Zugangspunkt des Emulators einstellen. Jetzt ist das Problem, das ich habe, eine Nachricht von meinem Server an das Gerät über den gleichen Proxy zu senden. Ich bin mit dem Servlet-Code aus der Demo, die die KlasseGoogle Cloud Messaging GCM über Proxy

com.google.android.gcm.server.Sender 

Helfer verwendet die Nachricht zu senden.

Ich betreibe die Servlets auf tomcat 7.

habe ich versucht, den Proxy-up in den catalina.properties wie so Datei einstellen.

http.proxyHost=proxy.company.com 
http.proxyPort=8080 

Und ich habe versucht, Eigenschaften im Servlet selbst wie unten eingestellt.

System.setProperty("http.proxyHost", "proxy.company.com"); 
System.setProperty("http.proxyPort", "8080"); 

Aber immer noch bekomme ich die Auszeit. Ich weiß, es ist der Firmen-Proxy, weil ich das Messaging zu Hause funktioniert, wo ich keinen Proxy habe.

Ich habe gesehen, ein Proxy-Objekt im Java-Code erstellt und dann eine Verbindung damit erstellt, aber ich denke nicht, dass hier verwendbar ist, da ich Sender Helper-Klasse zum Senden der Nachricht verwenden.

Dies ist die Zeile, die bei einem Timeout fehlschlägt.

Result result = sender.send(message, registrationId, 5); 

Jede Hilfe wäre willkommen.

Grüße

Bill

+0

OK Ich habe mit diesem etwas fortgeschritten. Ich entdeckte, dass die ausgehende Nachricht SSL auf Port 443 verwendete. Daher fügte ich in der Datei catalina.properties einen Eintrag für den https-Proxy hinzu, der die gleichen Werte wie der HTTP-Proxy verwendete und der die Nachricht anscheinend ausgehen ließ. Die Nachricht erreicht den Emulator jedoch nicht und stattdessen erhalte ich einen Fehler in logcat, der folgendes anzeigt: [GTalkConnection.12] doConnect: hat XMPPError beim Verbinden mit mtalk.google.com:5228 .: abgefangen - verursacht durch: java.net. SocketException: Zeitüberschreitung bei der Operation Das überraschte mich, als ich dachte, dass der Dienst über Port 5228 registriert wurde. – billby

Antwort

8

In Ordnung, ich habe es endlich funktioniert. In meinem Kommentar erwähnte ich, dass es mir gelungen war, die Nachricht zu senden, aber der Emulator erhielt sie nicht. Ich hatte vergessen, meinen eigenen früheren Ratschlag zu befolgen und den Emulator über die Befehlszeile mit den folgenden Proxy-Parametern auszuführen:

emulator.exe -avd avd22google -http-proxy proxy.company.com:8080 -debug-proxy

So zusammenzufassen, mein erstes Problem war, dass ich den Emulator auf dem mit GCM und mit meinem lokalen Server registriert hatte, aber als ich auf send-Nachricht klickte, bekam ich eine Zeitüberschreitung.

Zuerst dachte ich, es war die Firewall, also habe ich etwas recherchiert und den Proxy in tomcat catalina.properties Datei eingerichtet. Das machte keinen Unterschied.

ich verwendet, um die „Charles“ Web-Proxy-Debugger-Software zu sehen, wo die Nachricht gesendet werden soll versucht hat und es kam mit https://android.googleapis.com:443

Also zunächst bis ich fügte ich folgendes meine catalina.properties Datei:

https.proxyHost=proxy.company.com 
https.proxyPort=443 

Es hat immer noch nicht funktioniert.Ein Kollege von mir hat mir gesagt, dass unsere Firma Proxy alle Arten von Anfragen über Port 8080 behandelt, so änderte ich die die poort Linie:

https.proxyPort=8080 

Dies erlaubt die Nachricht gesendet werden. Aber dann kam die Nachricht nicht zum Emulator und ich erhielt den folgenden Fehler in LogCat.

Dann erinnerte ich mich, dass Sie den Emulator mit der Befehlszeile starten müssen, damit es den Proxy verwenden. Als ich das tat, erschien eine Flut von Nachrichten auf meinem Emulator!

Also habe ich es endlich Ende an Ende arbeiten. Es hat ungefähr eine Woche gedauert, bis GCM vollständig in meiner Unternehmensfirewall funktioniert, also hoffentlich kann dieser Beitrag einigen anderen armen Leuten helfen, dies in der Zukunft zu tun.

prost

Bill