FCMがMismatchSenderIdを取得する


82

プッシュ通知の送信にGoogleFCMを使用するアプリケーションがあります。

ユーザーのグループにプッシュ通知を送信するとMismatchSenderId、一部のユーザーに対しての応答があります。ただし、すべてのユーザーがまったく同じアプリケーションを使用しています。一部のユーザーは成功応答を取得し、他のユーザーはMismatchSenderIdを取得するにはどうすればよいですか?

私は多くの調査を行い、FCMが必要とするすべての前提条件を追加したことを確認しました。

助言がありますか?

編集:

応答例:

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

編集2:

サーバー側の送信コード(PHP)は次のとおりです。

$fields = array
(
  'to' => $token,
  'data' => $data
);

$headers = array
(
  'Authorization: key=AIza**************************',
  'Content-Type: application/json'
);

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode($fields) );
curl_exec( $ch );
curl_close( $ch );

更新:

SDKのアップデートで問題が解決したようです。現在最新のものを使用com.google.firebase:firebase-messaging:9.6.1していますが、「MismatchSenderId」を取得できなくなりました。


3
MismatchSenderIdは、クライアントが送信に使用しているサーバーとは異なるサーバーに登録していることを意味します。すべてのクライアントが同じプロジェクトに登録していますか?また、質問にMismatchSenderId応答を含めることはできますか?
アーサー・トンプソン

はい、同じプロジェクト、同じアプリケーション、同じサーバーキーです。
TareK Khoury 2016

このメッセージの送信方法のコードを教えてください。私は、問題の原因を知っているかもしれません...
ANZ

3
@TareKhoury、ありがとう。まず第一に。使用する認証キーがServer Key(サーバータブのFirebaseコンソールにあります)からではなくAPI_KEY、であることを確認してくださいgoogle-service.json。次に、宛先を正しく設定していることを確認してください。たとえば、to" : "/topics/yourtopic"すべてのデバイスにメッセージを送信する場合(最初にそのトピックにサブスクライブする必要があります)。または、特定のデバイスに送信しようとすると、デバイストークンを入力する必要があります(cec5gH04....92IyHrB2K
Firebase

3
過去2年間で、誰かが問題を解決することができましたか?
Dylanthepiguy

回答:


35

Firebaseはサーバーキーを新しいバージョンにアップグレードしました。古いキーの代わりに新しいキーを使用してください。

[設定]-> [プロジェクト設定]-> [クラウドメッセージング]タブに移動します

ここに画像の説明を入力してください


あなたはサーバーキーまたはレガシーサーバーキーを使用している場合は任意の違いはありません
R15

23

私はこの解決策を見つけました:

  • まず、サーバーキーが正しいかどうかを確認します。これはAIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXのようなものです。
  • 次に、79XXXXXXXXのような送信者IDを確認します。これも正しかったです。
  • 主な問題は、通知を送信する必要のあるdevice_ID(UDID)にありました。実際、FCMでAndroid側で取得したDeviceIdはGCMとは異なります。GCMで作成されたDeviceIdFCMで使用することはできません。

あなたは私を大いに助けてくれました。アプリ開発者に送信者IDをコードに含めるように依頼する必要がありましたが、FCM APIKEYが機能しました。どうもありがとう。
ルイスミラネーゼ2017

3
バックエンドとAndroidアプリをFCMにアップグレードする場合、バックエンドでGCMトークンに既に登録されている方法をユーザーにプッシュ通知を送信するにはどうすればよいですか。?
Pinkesh Darji 2018

古いGCMトークンはFCMシステムがサポートdevelopers.google.com/cloud-messaging/faq
パラスディワン

おっす。senderIdをどこに配置しますか?使用していないようですが、数日前に通知を送信できました。事前メイトに感謝
voghDev

FCM APIを使用してバックエンドからHI @voghDev(fcm.googleapis.com/fcm/send)送信のSenderIDをヘッダにアプリ側で同一のSenderIDはUDID(DEVICE_ID)を作成するために使用される
ナウマンカーン

15

これは私のために働いた:

  • 現在のAndroidプロジェクトがどのFIREBASEプロジェクトにリンクされているかを確認し、そのプロジェクトのサーバーキーを使用し ます

別のFirebaseプロジェクト(プロジェクト2など)のサーバーキーを使用していました。Androidプロジェクト(Say Project 1)にリンクされているものと同じサーバーキーを使用しましたが、機能しました。私の経験では、1つのAndroidプロジェクト全体に1つのFirebaseアプリを使用すると、問題が解決したようです。


私も同じ状況に直面しました。Androidアプリにリンクされている古いプロジェクト。また、新しいプロジェクトのサーバーキーが機能していません(エラーMismatchSenderIdを返します)。古いプロジェクトでAndroidアプリを削除した後、新しいプロジェクトの新しいサーバーキーが機能するようになりました。
vk 2619

11

私の場合、プロジェクトの認証情報について間違えていました。あるプロジェクトのgoogle-services.jsonと、別のプロジェクトのサーバーキーを使用しています。


7

参考までに。テストしているAndroidアプリが最新/最高のgoogle-services.jsonファイルで構築されており、FCMコンソールからアプリに送信できることを誓ったにもかかわらず、このエラーが発生していました。を実行した後にアプリを再構築しましたClean Project。これで、登録されているFCMトークンを使用してアプリに送信できます。ですから、壁に頭を長時間叩く前に、きれいに再構築してみてください。


6

私たちはこの問題を解決するために何時間も費やしました。トークンがさまざまなFCMアカウント設定(google-services.json)を使用して生成されており、通知がさまざまなFCMアカウントを使用して設定されていることがわかりました。両方を同期したとき、それは魅力のように機能しました。


これは私にも起こりました。お使いの携帯電話用に生成されたトークンが正しいビルド環境(dev / alpha / prod)であることを100%確認してください
ehacinom 2018年

4

senderIdFCMコンソールのプロジェクト番号とは異なることがわかったので、
google-services.jsonを再ダウンロードすると、すべて正常に機能します


4

以下に示すように正しいキーを入力することで、私の問題は解決しました。

この写真のような コピーサーバーキーここに画像の説明を入力してください

そして、この写真のようにポストマンでこのコードをコピーします ここに画像の説明を入力してください

そして体はこの写真のようにになっています

ここに画像の説明を入力してください 注意:

  • ヘッダーのサーバーキーの前にkey =を追加する必要があります
  • ヘッダーキーを正しく入力していることを確認してください(Authorization = "key = ..."およびContentType = "application / json")
  • リクエストを正しいアドレスに送信しましたhttps://fcm.googleapis.com/fcm/sendおよびPostメソッド)

3
  • すべての資格情報を相互検証しました

  • 新しいサーバーキーを追加し、古いサーバーキーを削除しました

  • google-services.jsonを再度ダウンロードしました

問題を解決したものはありません

次に、プロジェクトをクリーンアップしてからプロジェクトを再構築します。その後、正常に動作します。


あなたは私の日を救う:D
Tuan Luong

2

アプリからすべての解析コード(ライブラリ、AndroidManifestのレシーバーなど)を削除してください。断続的なプッシュ通知が機能していないことがわかりました。私の観察によると、それは新規インストールでは機能しますが、Playストアからのアプリの更新では機能しません。

Parseの内部でFCMと競合していると思います(ParseはGCMを使用しているため、GCMとFCMを同時に使用する必要があると思います)。すべてのParseレシーバーとライブラリーを削除するとすぐに、うまくいきました。


2

実際、この問題には多くの理由があります。無効なトークンが渡されたためです。あるアプリから生成された同じトークンを渡し、別のアプリで同じトークンを使用していました。トークンが更新されると、それは私のために働きます。


2

不一致の送信者IDInfcmのこのエラーを排除するには

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

エラーが発生しました、

  1. そのため、最初にFCMで、MyDemoApplicationなどのアプリケーションを登録する必要がありました。

  2. その後、FCMはサーバーキー、つまりAIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHU送信者ID、つまり346252831806これらの形式を生成します。

  3. Android Studioで、プロジェクトはこれらのFCMで作成されたプロジェクト(MyDemoApplication)に接続されます

  4. そして、最も重要なステップは、デバイストークンまたは登録IDに必要です。これらのトークンはAndroidStudioで作成する必要があります。

  5. その後、WebAPIプロジェクトでSenderIDとAPIキーを使用すると、確実に通知が届きます


1

マニフェスト.jsonのgcm_sender_idを確認してください。不一致の場合-正しいですが、新しい送信者IDの新しいサブスクライバーを作成する必要があります。既存のサブスクライバーが壊れます。


1

応答「MismatchSenderId」によると、これはFireBaseとローカルの「google-services.json」の不一致です。両方のマニフェストが一致することを確認する必要があります

FireBaseコンソールで[YourProject]> [Project OverView]> [Cloud Messaging]に移動すると、Androidプロジェクトの「google-services.json」と一致する必要がある「SenderID」が表示されます。

あなたができる最善のことは、「一般」タブから最終的なjsonファイルをダウンロードしてプロジェクトに配置することです。


1

プッシュ通知を送信しようとしたときに同じエラーが発生しました。更新されたgoogle-services.jsonファイルを取得し、それと置き換えます。私のために働いた。


0

私は同じ問題を抱えていました、そして私はそれをこのように修正しました:

  1. GoogleFCMコンソールに移動します
  2. アプリを選択してください
  3. 左側のメニューで設定アイコン(標準ホイール)を見つけます
  4. それをクリックし、プロジェクト設定をクリックした後
  5. サーバーキーをコピーしてphpに貼り付けます

出来上がり...


0

Firebaseの初期化を更新するとうまくいきます。

<script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
 <script>
  // Initialize Firebase
  // TODO: Replace with your project's customized code snippet
  var config = {
    apiKey: "<API_KEY>",
    authDomain: "<PROJECT_ID>.firebaseapp.com",
    databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
    storageBucket: "<BUCKET>.appspot.com",
    messagingSenderId: "<SENDER_ID>",
  };
  firebase.initializeApp(config);
</script>

0

私にとっての問題はphonegap-plugin-push、phonegapアプリでアプリをテストして、incordovaを使用していたことでした。

これに伴う問題は、このプラグインの何らかの理由で、phonegapアプリがプラグインをインターセプトし、送信者IDに関係なく、ダミーの登録キーを返すことです。

したがって、それを機能させるには(すべてのキーが正しい限り)、エミュレーターまたはusbを介したAndroidエミュレーションを使用して、プログラムを別の方法でテストすることです。そして、あなたの鍵は一致します。

うまくいけば、これは誰かの時間を節約します。


0

あなたはおそらく私がやっていたwhwatをやっています。GCMトークンはFCMと同じではなくなりました。FCMではなくGCMトークンIDをプルしているかどうかを確認してください。FirebaseInstanceIdServiceをオーバーライドして、正しいIDを取得していることを確認してください。ある時点では同じだと思っていましたが、今は違います。私はテストを記録して見ました。あなたがそれをした後、他の人が安全として言うように、google-services.jsonも更新してください。


0

私はこれで何日も無駄にしました。

私の場合、このブログをフォローしてPostmanを使用し、mismatchsenderidエラーを取得しました。以前、私は取得していましたmessaging/mismatched-credential、そして人々は彼らのクライアントアプリが複数のプロジェクトを使用したと報告しました。

ただし、私には1対1のWebアプリとプロジェクトがあります。 しかし、私のホストを経由してすべてのアプリケーションng serveのデフォルトのポート4200上だからかかわらず、私が上で開発していたものをプロジェクト/アプリのペアの、私はいつも使用して、私のクライアントのWebアプリから同じトークンを得るでしょうAngularFireMessaging.requestToken-このトークンはいつも私の初めての上に作成されたトークンました開発中のfirebaseアプリの実行。

回避策として、さまざまなポートでさまざまなアプリ/プロジェクトを起動し、それぞれのプロジェクトに適切なトークンを取得します。


0

注:FCMトークンの最初の部分(前:)を切り捨てましたが、エラーはMismatchSenderId

スクリプトを修正し、すべてが正常に機能するようになりました。


0

私の場合、誰かがApple開発ポータルで私のアプリのAPNSSL証明書を削除しました。

  • 新しい証明書を作成する必要がありました:識別子/ My AppId /プッシュ通知/編集。
  • 次に、コンソールからFirebaseプロジェクトにアップロードしました:プロジェクト設定/クラウドメッセージング/ iOSアプリの構成/ APN証明書。

これで問題は解決しました。


0

私の場合、それはとても簡単でした。データベースから間違ったregistrationIdをプルしていました。正しいIDを取得した後、それは機能しました。


0

私のreact-native--node.jsプロジェクトでも同じ問題が発生しました。アンドロイドで通知を送りたかった。すべてがセットアップされ、正常に機能していました(つまり、node.jsから通知を送信し、Androidデバイスで通知を受信することができました)。

数日後、別のFirebaseアカウントを使用する必要があったため、プロジェクトのandroid / appフォルダーにあるgoogle-services.jsonファイルを変更して、プロジェクトを再構築しました。しかし、サーバーからもう一度通知を送信しようとすると、エラーが発生しました-

{.............
  errorInfo: {
    code: 'messaging/mismatched-credential',
    message: 'SenderId mismatch'
  },
  codePrefix: 'messaging'
}

解決:

場所-app / build / generate / res / google-services / {build_type} /values/values.xmlのXMLファイル が新しいgoogle-services.jsonに従って自動的に更新されませんでした。それはまだ私の以前のgoogle-services.jsonファイルからの古い値で構成されていました。values.xmlファイルを手動で変更する必要がありました。

これは、app / build / generate / res / google-services / {build_type} /values/values.xmlファイルの外観です(google-services.jsonに従って自動的に更新されない場合は、手動で変更する必要があります)-

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <! -- Present in all applications -->
    <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>

    <! -- Present in applications with the appropriate services configured -->
    <string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
    <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
    <string name="ga_trackingId" translatable="false">UA-65557217-3</string>
    <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
    <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="project_id" translatable="false">mydemoapp</string>

</resources> 

これらのリンクを参照できます。

  1. https://firebase.google.com/docs/projects/multiprojects
  2. JSONファイルの処理:https//developers.google.com/android/guides/google-services-plugin#processing_the_json_file

0

「MismatchSenderId」ステータスを取得する理由を理解するのに大きな問題がありました。ルートにgms依存関係を追加しましたbuild.gradleが、エラーは実際にはアプリにgmsプラグインを適用していませんでしたbuild.gradle

アプリにこの行がない場合はbuild.gradle、これが通知が機能しない理由である可能性があります。 apply plugin: 'com.google.gms.google-services'


0

GCMでデバイスIDが作成されると、新しいサーバーキーを使用してFCM経由でプッシュメッセージを送信できないことに気付きました。古いAPIキーを使用する必要があります。


0

postmanのfcmapi「https://fcm.googleapis.com/fcm/send」を使用して通知を送信しようとしました。サーバーキーは問題なく、トークンは正常に貼り付けられましたが、それでもエラー「MismatchSenderId」が発生していました。

次に、Android側のgradleファイルに次の依存関係を導入しました。

implementation platform('com.google.firebase:firebase-bom:25.12.0') 

デバイスで通知の受信を開始しました


-3

私も同じエラーが発生します。api_keyをコピーして、google_services.jsonに変更しました。その後、それは私のために働きます

"api_key": [
        {
          "current_key": "********************"
        }
      ],

これを試して


-6

このAIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVYのようなサーバーキーは、firebase consoleconsole.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging[設定]セクションで 利用できます

コードで正しいキーを指定して、再試行してください。


8
正しいサーバーキーを使用しています。そうでない場合は、問題の「一部のリクエスト」ではなく、すべてのリクエストに対して「MismatchSenderId」を取得します。
TareK Khoury 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.