27

GCM でプッシュ通知サーバーを実装しています。Google API コンソールから取得した送信者 ID (アプリケーション キー) と、GCM サービスから取得した登録 ID を使用して POST リクエストを送信します。

投稿された JSON には、1 つの登録 ID が含まれます。私はいつも同じ応答を受け取ります:

{
  "multicast_id":8546528660791862014,
  "success":0,
  "failure":1,
  "canonical_ids":0,
  "results":[
    {
      "error":"MismatchSenderId"
    }
  ]
}

何が問題なのですか?私は何を間違っていますか?

4

11 に答える 11

33

デバイスから Android アプリをアンインストールし、アプリを再度実行してください

これで、新しい登録 ID が取得されます。これにより、特定のケースで MismatchSenderId の問題が解決される場合があります ( APIキーを変更/更新しても、古い登録キーを使用している場合に発生することがあります)。私の場合、最初にデバイスの登録 ID を取得し、次に (Google GCM サーバーで) API キーを変更すると、MismatchSenderId エラーが発生しました。最後に、デバイスから Android アプリをアンインストールしたところ、問題は解決しました。

于 2012-08-07T13:13:36.390 に答える
23

スタック オーバーフローの投稿を参照してください。GCM サーバー側から "MismatchSenderId" を取得するのはなぜですか? .

上記URLより

Sender ID と API_KEY を再確認してください。一致していないと、MismatchSenderId エラーが発生します。Google API コンソールで、プロジェクトの URL を確認します

https://code.google.com/apis/console/#project:xxxxxxxxxxx

。xxxxxxxxx はプロジェクト ID であり、これが送信者 ID です。

一部の人々は、「サーバー アプリのキー」タイプのキーを使用して問題を報告していますが、代わりにブラウザ キー タイプを使用して成功しています。個人的には、サーバー キー タイプが適していますが、YMMV の両方を試してみてください。

于 2012-07-03T17:50:04.680 に答える
5

送信者 ID には「プロジェクト ID」ではなく「プロジェクト番号」(数値 ID) を使用する必要があります。

于 2014-10-28T00:00:44.083 に答える
2

デバイスを登録するときに間違った SenderID を指定したため、このエラーは確実です。

これは登録リクエストのサンプルです(フィドラー)

POST https://android.clients.google.com/c2dm/register3 HTTP/1.1 ホスト: android.clients.google.com 接続: キープアライブ Content-Length: 83 Authorization: AidLogin 51734556544354357:9087138434543543508 Content-Type: application/ x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/39.0.2171.99 Safari/537.36 Accept-Encoding: gzip, deflate Accept-Language: en -US,en;q=0.8,ar;q=0.6,fr;q=0.4

app=gpYOURAppHereloin&device=5112132132137117&sender= YourApplicationIDHere

以下の手順でSenderIDを見つけることができます

  1. Google デベロッパー コンソールを開きます。
  2. プロジェクト ID とプロジェクト番号を表示するページが表示されます。例: プロジェクト番号: 67023432432。プロジェクト番号をコピーして、GCM 送信者 ID として使用します。

より詳しい情報:

于 2015-01-21T16:40:08.560 に答える
0

API コンソールから API キーを生成します。バックエンドでブラウザ アプリ キーを使用し、クライアント コードでプロジェクト ID を送信者 ID として使用します。

于 2012-07-03T09:51:34.343 に答える
0

私は同じ問題を抱えていましたが、愚かなことをしました.Googleコンソールに複数のプロジェクトがあり、プロジェクトに属するプロジェクト番号の登録IDを生成し、別のプロジェクトに属するApiキーに通知を送信しようとしました事業。このエラーの最初のステップは、作業しているプロジェクトを確認することです。

于 2014-10-02T20:54:55.237 に答える
0

登録 ID のソースを確認する必要があります。GCM メッセージ投稿内で C2DM 登録 ID を使用することはできません。Google のドキュメントから:

C2DM と GCM は相互運用できません。たとえば、GCM から C2DM 登録 ID に通知を投稿したり、C2DM 登録 ID を GCM 登録 ID として使用したりすることはできません。サーバー側アプリケーションから、登録 ID が C2DM からのものか GCM からのものかを追跡し、適切なエンドポイントを使用する必要があります。

C2DM から GCM に移行するとき、サーバーは、特定の登録 ID に古い C2DM 送信者が含まれているか、新しい GCM プロジェクト番号が含まれているかを認識する必要があります。これが私たちが推奨するアプローチです: 新しいアプリ バージョン (GCM を使用するもの) に、登録 ID と共にビットを送信させます。このビットは、この登録 ID が GCM 用であることをサーバーに伝えます。余分なビットを取得できない場合は、登録 ID を C2DM としてマークします。有効な登録 ID が C2DM としてマークされなくなったら、移行を完了できます。

もう 1 つ注意が必要なのは SENDER_ID です。InstanceID を使用して RegistrationID を取得する場合、SENDER_ID の形式は数値です。

    InstanceID instanceID = InstanceID.getInstance(this);
    String token = instanceID.getToken(SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

SENDER_ID はプロジェクト名を使用できませんでした。https://developers.google.com/mobile/add を使用て「サーバー API キー」と「送信者 ID」を取得してください。

于 2015-10-16T16:18:06.750 に答える
0

送信者 ID が変更された場合、Google Play Services のcom.google.android.gms.gcm.GoogleCloudMessaging.register()メソッドは、新しい送信者 ID に関係なく、元の登録 ID を返し続けることに注意してください。Google Play Services で同じクラスの unregister() メソッドを呼び出して、以前にキャッシュされた古い値を更新して消去する必要があります。

ここで API 情報を参照してください: com.google.android.gms.gcm.GoogleCloudMessaging.register()

別の方法として、前の回答で述べたように、いつでもアプリのデータを削除するか、アンインストールして再インストールすることができますが、これは運用環境では受け入れられません。

GCM 設定と送信者 ID を変更した場合、アプリは登録を解除して GCM に新たに登録する必要があることを認識している必要があります。これを実現する簡単な方法の 1 つは、新しいバージョンを Play ストアにプッシュし、ユーザーがアップデートをダウンロードできるようにして、このバージョンを最初の実行時に機能させることです。ただし、何らかの理由でアップデートされないアプリはカウントされません。

その上、設定またはデータベースに登録 ID を保存している場合は、アプリが更新されたときにその値を更新することを忘れないでください。更新は ID の再生成を意味する可能性があり、GCM ではなくコードが以前の ID を誤ってキャッシュしているもの。ここの一般的なガイドラインに従ってください: 一般的なクライアント側の実装ガイドライン

于 2014-12-15T18:52:44.470 に答える
0

https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpointsにある Google サンプル コードをテストしていたときに同様の問題があり、 XYZ が言ったことは、この問題の解決に本当に役立ちました。

私は、messaging.messagingEndpoint.sendMessage メソッドの下で、Google アプリ エンジン API Explorer から自分の携帯電話にメッセージを送信できましたが、Google アプリ エンジン コンソール ログでは、常に MismatchSenderId と表示されていました。明らかにエラーが発生するはずがないときにログに記録されたエラーは、私を悩ませました。

送信者 ID の不一致

私は本当に混乱していましたが、これを解決する方法は次のとおりです。

  1. スマートフォンから Android アプリをアンインストールします。
  2. Android アプリを再インストールし、reg ID をメモします。
  3. Services > registration API v1 > registration.listDevices の下の API エクスプローラーに移動し、GCM のすべての RegID を一覧表示します。
  4. このリストをメモ帳などのどこかにコピーします。
  5. Services > registration API v1 > registration.unregister の下の API エクスプローラーに移動し、アプリで使用されているものと一致しないすべての regID を登録解除します。

メッセージの送信を再試行すると、今回は Google App Engine コンソール ログにエラーが記録されずに機能するはずです。

于 2015-01-03T17:46:37.383 に答える