2013-03-01 10 views
5

Google Cloud Messaging(GCM)を使用したプッシュ通知に取り組んでいます。 this tutorialに続いて、サーバーとクライアント側を設定できます。ローカルサーバーで動作しているGCMサーバーに接続する

サーバーは、Google API(APIレベル17)でApache Tomcat6.0(localhost)とAndroidエミュレータで動作します。私は送信者IDとAPIキーを持っています。エミュレータから実行すると、正常なデバイス接続メッセージが表示されます。その後、サーバーからメッセージを送信すると、次のエラーが表示されます。

com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401() 
com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:211) 
com.google.android.gcm.server.Sender.send(Sender.java:125) 
com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServlet.java:83) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

他の投稿から、間違ったAPIキーが原因であると私は理解しています。しかし私の場合は、APIコンソールから正しいものを使用していることを確認しました。

ところで、エミュレータを起動すると、「サーバーにregIdを送信しています」というメッセージが表示されました。登録IDとは何ですか?送信者IDと同じではありません。エンコードされたもののように見えます。

突破がありますか?

EDIT

問題が最終的に解決されます! AntはWARファイルを正しく構築していませんでした。 APIキーはほとんど更新されません。バグを発見するのは悪夢の地獄だった。すべての入力に感謝!

+0

エミュレータが動作しません。デバイスで試してください。 –

+0

デバイスAPIレベルの制限はありますか? – Renjith

+0

2.2以上で動作しています。 –

答えて

2

私はあなたがGCMガイドを読むことをお勧め:

GCM guide for Android

送信者IDは、GCMとサーバー間のコミュで使用されようとしている定数です。 regsitratiomID(regID)は、電話機が自分のサービスに登録するときにGCMサービスによって管理されます。

より良い定義: http://developer.android.com/google/gcm/gcm.html

送信者ID:

はじめに説明したように、APIコンソールから取得したプロジェクトの数。送信者IDは、登録プロセスで、デバイスにメッセージを送信することが許可されているAndroidアプリケーションを識別するために使用されます。

登録ID:

それがメッセージを受信することを可能にするAndroidアプリケーションにGCMサーバによって発行されたID。 Androidアプリケーションに登録IDが付与されると、それは第三者のアプリケーションサーバーに送信され、これを使用して特定のAndroidアプリケーションのメッセージを受信するよう登録した各デバイスを識別します。言い換えれば、登録IDは、特定のデバイス上で実行されている特定のAndroidアプリケーションに関連付けられています。

0

送信者IDは、Googleコンソールで作成したプロジェクト番号です。

登録ID

GCMへのアプリケーション・レジスタは、それが登録IDを取得します。メッセージを配信するには、この登録IDがGCMによって使用され、デバイスとアプリケーションが識別されます。 あなたのアンドロイドアプリは、この登録IDをサーバーに送信して、サーバーからメッセージを送信したいときに登録IDでタグ付けすることができます。そのため、GCMは適切なデバイス&に適切なアプリを配信できます。

メッセージを受信しない限り、登録IDがサーバーと正常に共有されているかどうか(Get/Post)を診断します。

2

メッセージの送信に使用しようとしている送信者アカウントを認証できませんでした。考えられる原因は次のとおりです。

  1. 承認ヘッダーが見つからないか、構文が無効です。
  2. 無効なプロジェクト番号がキーとして送信されました。
  3. キーは有効ですが、GCMサービスが無効です。
  4. サーバーキー のIPでホワイトリストに登録されていないサーバーからのリクエストです。

Authorizationヘッダー内で送信しているトークンが、プロジェクトに関連付けられている正しいAPIキーであることを確認します。あなたは、次のコマンドを実行して、あなたのAPIキーの有効性を確認することができます。

api_key=YOUR_API_KEY 

curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"ABC\"]}" 

あなたが登録IDの有効性を確認したい場合は、登録IDと「ABC」を交換することによって行うことができます。 HTTPステータスコードが401の場合に発生します。

+0

私は新しいバックエンドと同様の問題があります。奇妙な部分はカールですが、同じapi_keyを持つ自動生成テストページでは、GCMメッセージを送信するときに401エラーが発生します。パズルリング: - P – kenyee

関連する問題