5

Google Cloud Messaging(GCM) でプッシュ通知に取り組んでいます。このチュートリアルに従って、サーバー側とクライアント側をセットアップできます。

サーバーは Apache Tomcat6.0 (localhost) と Google API の Android エミュレーター (API レベル 17) で実行されます。送信者 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 とは異なります。エンコードされたもののように見えます。

何か突破?

編集

問題はついに解決されました!Ant が WAR ファイルを適切に構築していませんでした。そのため、API キーはほとんど更新されません。バグを見つけるのは悪夢のような地獄でした。入力していただきありがとうございます!

4

3 に答える 3

2

GCMガイドを読むことをお勧めします:

Android 用 GCM ガイド

送信者 ID は、GCM とサーバー間の通信で使用される定数です。登録 ID (regID) は、電話が GCM サービスに登録されるときに、GCM サービスによって管理されます。

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

送信者 ID:

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

登録ID:

メッセージを受信できるようにするために、GCM サーバーが Android アプリケーションに発行する ID。Android アプリケーションが登録 ID を取得すると、それをサードパーティ アプリケーション サーバーに送信します。サードパーティ アプリケーション サーバーは、その ID を使用して、特定の Android アプリケーションのメッセージを受信するために登録されている各デバイスを識別します。つまり、登録 ID は、特定のデバイスで実行されている特定の Android アプリケーションに関連付けられています。

于 2013-03-01T12:56:03.133 に答える
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 の有効性を確認したい場合は、「ABC」を登録 ID に置き換えることで確認できます。HTTP ステータス コードが 401 の場合に発生します。

于 2013-07-26T07:59:36.703 に答える
0

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

登録ID

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

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

于 2013-03-01T12:52:12.200 に答える