7

会社のプロキシ経由でデバイスにメッセージを送信できません。
Google サイトで GCM チュートリアルを実行し、Android エミュレーターを使用して Google サーバーにデバイスを登録し、最後にサーバーにもデバイスを登録しました。
このためには、会社のプロキシを経由して、エミュレータのアクセス ポイントに設定する必要がありました。今私が抱えている問題は、同じプロキシを介してサーバーからデバイスにメッセージを送信することです。を使用するデモのサーブレット コードを使用しています。

com.google.android.gcm.server.Sender

メッセージを送信するためのヘルパー クラス。

Tomcat 7 でサーブレットを実行しています。

そのように catalina.properties ファイルにプロキシを設定しようとしました。

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

そして、以下のようにサーブレット自体の中にプロパティを設定しようとしました。

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

しかし、それでもタイムアウトが発生します。プロキシがない自宅でメッセージングが機能しているため、会社のプロキシであることはわかっています。

Javaコードで作成されたプロキシオブジェクトとそれを使用して作成された接続を見てきましたが、Senderヘルパークラスを使用してメッセージを送信しているため、ここでは使用できないと思います.

これは、タイムアウトで失敗する行です。

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

どんな助けでも大歓迎です。

よろしく

明細書

4

1 に答える 1

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 を介してすべてのタイプのリクエストを処理することを教えてくれました。

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 が完全に機能するようになるまでに約 1 週間かかりました。

乾杯

明細書

于 2012-07-13T07:54:54.343 に答える