web-dev-qa-db-ja.com

FCMがMismatchSenderIdを取得

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

ユーザーのグループにプッシュ通知を送信すると、一部のユーザーに対して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」は取得できません。

52
TareK Khoury

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

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

enter image description here

たぶんうまくいく

28
Jinu P C

同じ問題がありました。それを理解するのに何時間も費やした後、私はこの解決策を見つけました:

  • 最初にサーバーキーが正しいかどうかを確認します。これはAIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXのようなものです
  • 次に、79XXXXXXXXのような送信者IDを確認しましたが、これも正しいです。
  • 主な問題はdevice_ID(UDID)に通知を送信しなければならない人にありました。実際に、FCMのAndroid側で取得したDeviceIdはGCMとは異なります。 GCM created DeviceId in FCMは使用できません。

これがお役に立てば幸いです。ありがとう

16
Nauman Khan

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

  • Firebase Projectの現在のAndroidプロジェクトISがリンクされていることを確認し、そのプロジェクトのServer Keyを使用します。

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

6
gore.kha

私の場合、プロジェクトの資格情報を間違えただけです。あるプロジェクトではgoogle-services.jsonを使用し、別のプロジェクトではサーバーキーを使用しています。

私のために働くもの:
senderIdがFCMコンソールのプロジェクト番号と異なることがわかりました
したがって、google-services.jsonを再ダウンロードしましたが、すべて正常に動作します

4
Flowra

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

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

2
Wild

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

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

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

1
Diego Sanabria

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

1
Abdul Rauf

check gcm_sender_id manifest.jsonで不一致の場合-正しいが、新しい送信者IDの新しいサブスクライバーを作成する必要があります。既存の加入者が壊れます。

1
stasionok

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

1
Shabir Mustafa

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

1
Karthikeyan Ve

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

0
cewe

私は同じ問題を抱えていたので、次のように修正しました。

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

出来上がり...

0
V. Sambor

これに何日も費やしました。

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

ただし、私にとっては、1対1のWebアプリとプロジェクトがあります。 しかし、私はデフォルトのポート4200でng serveを介してすべてのアプリをホストします。 AngularFireMessaging.requestTokenを使用するクライアントWebアプリからの同じトークン-このトークンは常に、開発中の最初のfirebaseアプリの実行で作成されたトークンでした。

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

0
dkelosky

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
Shivam Sihare

参考までに。 swear私がテストしていたAndroidアプリは、最新/最高のgoogle-services.jsonファイルを使用してビルドされ、FCMから送信できたにもかかわらず、このエラーに遭遇しました。アプリのコンソール。 Clean Projectを実行した後にアプリを再構築し、登録したFCMトークンでアプリに送信できるようになりました。ですから、壁に頭を打ちつけすぎる前に、きれいに再構築してみてください。

0
Robert Thille

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

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

たぶんこれは誰かを助けることができます

0
MartLav

私にとって問題は、コルドバでphonegap-plugin-Pushを使用し、phonegapアプリでアプリをテストしていたことでした。

これに関する問題は、このプラグインの何らかの理由で、phonegapアプリがそれをインターセプトし、送信者IDが何であってもダミーの登録キーを返すことです。

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

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

0
Pablo

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

0
j2emanue