web-dev-qa-db-ja.com

GCMサーバー側から「MismatchSenderId」を取得するのはなぜですか?

Androidアプリ用のプッシュサービスを作成しようとしています。この問題については、Google GCMのドキュメントと例に従います。

Androidアプリを登録/登録解除できます。サーバー側から、1つのサブスクリプションが登録されていることがわかりますが、サーバーからAndroidアプリにメッセージを送信しようとすると、常に次のエラーが表示されます。

デバイス#0へのメッセージ送信エラー:MismatchSenderId

Androidアプリでは、SENDER_ID = 200000000001を使用します。

GoogleがAPI_KEY = AIzxxxxxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxsを使用していると言っているように、サーバー側で

私はこの文書に従いました:

http://developer.Android.com/guide/google/gcm/demo.html

Google APIパネルでもGCMを有効にしましたが、その迷惑なエラーメッセージが表示されます。

この問題を修正するにはどうすればよいですか?

70

サーバーは、GCMサーバーからアプリに返された新しい登録IDを使用しましたか?古いC2DMサーバーから提供された登録IDにメッセージを送信しようとすると、この問題が発生しました。

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

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

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

APIキーが「サーバーアプリのキー(IPロック付き)」に属していることを確認します

66
azgolfer

数値IDを使用しないと、不一致が発生します。プロジェクトID IS NOT SENDER ID !!これを理解するのに9時間かかりました。 Googleが作成したすべての混乱については、次のリンクをチェックして数値IDを取得してください。

https://console.cloud.google.com

の代わりに

https://console.developers.google.com

それが役に立てば幸い!!

更新:-物事が再び変更されました。現在、送信者IDはfirebaseを使用しています。

https://console.firebase.google.com に移動して、プロジェクトを選択します。 [設定]-> [クラウドメッセージング]で、送信者IDを見つけることができます。

そしてそれは動作します!

22
Ajay Singh

ターミナルで以下のスクリプトを実行してください

curl -X POST \
-H "Authorization: key=  write here api_key" \
-H "Content-Type: application/json" \
-d '{ 
"registration_ids": [ 
"write here reg_id generated by gcm"
], 
"data": { 
"message": "Manual Push notification from Rajkumar"
},
"priority": "high"
}' \
https://Android.googleapis.com/gcm/send

成功または失敗した場合、メッセージが表示されます

7
Raj Kumar

最近同じ問題に遭遇し、プロジェクトIDに基づいて「gcm_sender_id」に異なる値を試しました。ただし、「gcm_sender_id」値は「プロジェクト番号」に設定する必要があります。

この値は、[メニュー]> [IAMと管理者]> [設定]で確認できます。

スクリーンショットを参照してください: GCMプロジェクト番号

4
mpavel

Androidアプリは、12桁の番号ID(GCMプロジェクト番号)を修正する必要があります。この12桁の番号が正しくない場合、このエラーも発生します。

この12桁の番号は、Google Playコンソールの特定のアプリ「サービスとAPI」->「リンクされた送信者ID」の下にあります

2
Britc
InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope)

authorizedEntityはサーバーのプロジェクト番号です

2
Ivan Vizuet

これは、Server keyおよびSender IDパラメーターHTTP要求が互いに一致しません。基本的に、サーバーIDとサーバーキーの両方が同じfirebaseプロジェクトに属している必要があります。下の画像を参照してください。異なるFirebaseプロジェクトからこれらのパラメーターを混合すると、エラーが発生しますMismatchSenderIdenter image description here

1
Chamath Jeevan