FCM erhält MismatchSenderId

82

Ich habe eine Anwendung, die Google FCM zum Senden von Push-Benachrichtigungen verwendet.

Wenn ich eine Push-Benachrichtigung an eine Gruppe von Benutzern sende, erhalte ich MismatchSenderIdfür einige von ihnen eine Antwort . Obwohl alle Benutzer genau die gleiche Anwendung haben. Wie können einige Benutzer eine Erfolgsantwort erhalten und andere eine MismatchSenderId?

Ich habe viel recherchiert und sichergestellt, dass ich alle Voraussetzungen hinzugefügt habe, die FCM benötigt.

Irgendwelche Vorschläge?

BEARBEITEN:

Beispielantwort:

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

EDIT 2:

Hier ist der serverseitige Sendecode (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 );

AKTUALISIEREN:

Es scheint, dass das Problem mit den SDK-Updates behoben wurde. Ich benutze jetzt die neueste com.google.firebase:firebase-messaging:9.6.1, ich bekomme nicht mehr "MismatchSenderId".

TareK Khoury
quelle
3
MismatchSenderId bedeutet, dass sich Ihr Client bei einem anderen Server als dem registriert, den Sie zum Senden verwenden. Registrieren sich alle Ihre Kunden bei demselben Projekt? Könnten Sie auch die Antwort MismatchSenderId in die Frage aufnehmen?
Arthur Thompson
Ja, dasselbe Projekt, dieselbe Anwendung, denselben Serverschlüssel.
TareK Khoury
Können Sie den Code anzeigen, wie Sie diese Nachricht gesendet haben? Ich könnte die Ursache des Problems kennen ..
AnZ
3
@ TareKhoury, danke. Als allererstes. Stellen Sie sicher, dass der von Ihnen verwendete Autorisierungsschlüssel Server Key(in der Firebase-Konsole auf der Registerkarte Server zu finden) und nicht API_KEYvon stammt google-service.json. Stellen Sie zweitens sicher, dass Sie das Ziel richtig eingestellt haben. to" : "/topics/yourtopic"Wenn Sie beispielsweise eine Nachricht an alle Geräte senden möchten (diese sollten zuerst dieses Thema abonnieren). Oder versuchen Sie, an ein bestimmtes Gerät zu senden, dann müssen Sie das cec5gH04....92IyHrB2K
Gerätetoken eingeben
3
Hat es jemand in den letzten 2 Jahren geschafft, das Problem zu lösen?
Dylanthepiguy

Antworten:

35

Firebase hat seine Serverschlüssel auf eine neue Version aktualisiert. Verwenden Sie neue Schlüssel anstelle von alten.

Gehen Sie zu Einstellungen-> Projekteinstellungen-> Registerkarte Cloud-Messaging

Geben Sie hier die Bildbeschreibung ein

Jinu PC
quelle
Es macht keinen Unterschied, ob Sie den Serverschlüssel oder den Legacy-Serverschlüssel verwenden
R15
23

Ich habe diese Lösung gefunden:

  • Zuerst überprüfe ich, ob der Serverschlüssel korrekt ist oder nicht. Dies entspricht AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • Dann überprüfe ich die Absender-ID wie 79XXXXXXXX, es war auch korrekt.
  • Das Hauptproblem war die Geräte-ID (UDID), an die ich die Benachrichtigung senden muss. Eigentlich DeviceId haben wir in FCM auf Android-Seite bekommen ist anders als GCM . Sie können die von GCM erstellte Geräte-ID nicht in FCM verwenden .
Nauman Khan
quelle
Sie haben mir sehr geholfen. Ich musste den App-Entwickler bitten, die Absender-ID in den Code aufzunehmen, dann funktionierte mein FCM-API-SCHLÜSSEL. Danke vielmals.
Luis Milanese
3
Wenn wir unser Backend und unsere Android-App auf FCM aktualisieren, können wir dann eine Push-Benachrichtigung an Benutzer senden, die bereits mit GCM-Token im Backend registriert sind. ?
Pinkesh Darji
Das FCM-System unterstützt alte GCM-Token. Developers.google.com/cloud-messaging/faq
Paras Diwan
Hallo Mann. Wo platzieren Sie die Absender-ID? Ich sehe, dass ich es nicht benutze und konnte vor einigen Tagen Benachrichtigungen senden. Vielen Dank im Voraus Kumpel
voghDev
Hi @voghDev vom Backend mit FCM Api ( fcm.googleapis.com/fcm/send ), das die senderId in den Headern und auf der App-Seite sendet. Die gleiche SenderId wird verwendet, um die UDID (device_Id) zu erstellen
Nauman Khan
15

Das hat für mich funktioniert:

  • Prüfen Sie, welche Feuerbasis PROJECT IHR CURRENT Android - Projekt und die Nutzung VERKNÜPFTEN IS Server Key AUS DIESEM PROJEKT.

Ich habe den Serverschlüssel aus einem anderen Firebase-Projekt verwendet (z. B. Projekt 2). Ich habe den gleichen Serverschlüssel verwendet, der mit meinem Android-Projekt (Say Project 1) verknüpft war, und es hat funktioniert. Nach meiner Erfahrung schien die Verwendung einer Firebase-App für ein gesamtes Android-Projekt das Problem zu beheben.

NepaliDeveloper
quelle
Ich war mit der gleichen Situation konfrontiert. Altes Projekt mit Android App verknüpft. Und der Serverschlüssel des neuen Projekts funktioniert nicht (Rückgabefehler MismatchSenderId). Nachdem ich die Android App im alten Projekt entfernt habe, wurde der neue Serverschlüssel aus dem neuen Projekt bearbeitet.
VK26
11

In meinem Fall habe ich mich nur über Projektanmeldeinformationen geirrt: Verwenden von google-services.json aus einem Projekt und Serverschlüssel aus einem anderen.

Luiz Fernando da Silva
quelle
8

Nur zu Ihrer Information. Ich bin auf diesen Fehler gestoßen, obwohl ich schwöre, dass die von mir getestete Android-App mit der neuesten / besten Datei google-services.json erstellt wurde und ich sie von der FCM-Konsole an die App senden konnte. Ich habe die App nach a neu erstellt Clean Projectund kann sie jetzt mit dem registrierten FCM-Token an die App senden. Versuchen Sie also vielleicht einen sauberen Wiederaufbau, bevor Sie Ihren Kopf zu lange gegen die Wand schlagen.

Robert Thille
quelle
Das war die Lösung für mich!
Gomino vor
6

Wir haben Stunden und Stunden damit verbracht, dieses Problem zu beheben. Wir haben festgestellt, dass das Token mit verschiedenen FCM-Kontoeinstellungen (google-services.json) generiert und die Benachrichtigung mit einem anderen FCM-Konto festgelegt wurde. Als wir beide synchronisierten, funktionierte es wie ein Zauber.

Abdul Rauf
quelle
Das ist mir auch passiert.
Stellen
4

Ich habe festgestellt, dass sich das senderIdvon der Projektnummer in der FCM-Konsole unterscheidet,
also habe ich google-services.json erneut heruntergeladen und alles funktioniert einwandfrei

Flowra
quelle
4

Mein Problem wurde durch Eingabe des richtigen Schlüssels wie unten gezeigt gelöst.

Kopieren Sie den Serverschlüssel wie in diesem Bild Geben Sie hier die Bildbeschreibung ein

Und dann kopieren Sie diesen Code in Postmann wie dieses Bild Geben Sie hier die Bildbeschreibung ein

und Körper ist Reihe wie dieses Bild

Geben Sie hier die Bildbeschreibung ein HINWEIS:

  • Sie müssen key = vor dem Server-Schlüssel im Header hinzufügen
  • Stellen Sie sicher, dass Sie die Kopfzeilen richtig eingeben (Authorization = "key = ..." und ContentType = "application / json").
  • Sie haben die Anfrage an die richtige Adresse gesendet ( https://fcm.googleapis.com/fcm/send und Post-Methode).
abolfazl bazghandi
quelle
3
  • Ich habe alle Anmeldeinformationen überprüft

  • Neuer Serverschlüssel hinzugefügt und alter gelöscht

  • Google-services.json erneut heruntergeladen

Nichts hat das Problem gelöst

Dann bereinige ich einfach das Projekt und erstelle das Projekt neu. Danach funktioniert es einwandfrei

Abraham Mathew
quelle
Sie retten meinen Tag: D
Tuan Luong
2

Stellen Sie sicher, dass Sie den gesamten Parse-Code aus Ihrer App entfernen (Bibliotheken, Empfänger in AndroidManifest usw.). Ich stellte fest, dass zeitweise Push-Benachrichtigungen nicht funktionierten. Nach meinen Beobachtungen würde es bei Neuinstallationen funktionieren, aber nicht bei App-Updates aus dem Play Store.

Ich glaube, dass etwas in Parse intern mit FCM in Konflikt stand (Parse verwendet GCM, also schätze ich, dass es mit der gleichzeitigen Verwendung von GCM und FCM zu tun hat). Sobald ich alle Parse-Empfänger und -Bibliotheken herausgerissen hatte, funktionierten die Dinge großartig.

Wild
quelle
2

Tatsächlich gibt es viele Gründe für dieses Problem. Meins wurde wegen ungültigem Token übergeben. Ich habe dasselbe Token übergeben, das von einer App generiert wurde, und dasselbe Token in einer anderen App verwendet. Sobald das Token aktualisiert wurde, funktioniert es für mich.

Shabir Mustafa
quelle
2

Um diesen Fehler bei nicht übereinstimmender Absender-ID in fcm zu beseitigen

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

es ist ein Fehler aufgetreten,

  1. Daher mussten wir zuerst in FCM die Anwendung registrieren, z. B. MyDemoApplication

  2. Danach generiert FCM den Serverschlüssel, dh die AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHUAbsender-ID346252831806 dieses Format wie dieses.

  3. Nach In Android Studio stellt unser Projekt eine Verbindung zu diesem von FCM erstellten Projekt her, dh MyDemoApplication

  4. Und der wichtigste Schritt ist das Gerätetoken oder die Registrierungs-ID. Diese Token müssen in Android Studio erstellt werden.

  5. Nach der Verwendung der Absender-ID und des API-Schlüssels im Web-API-Projekt erhalten Sie definitiv eine Benachrichtigung

Akash
quelle
1

Überprüfen Sie gcm_sender_id in manifest.json. Wenn nicht übereinstimmend - korrekt, aber Sie müssen neue Abonnenten für die neue Absender- ID erstellen . Besteht Abonnenten Pause.

stasionok
quelle
1

Gemäß der Antwort "MismatchSenderId" ist dies eine Nichtübereinstimmung zwischen FireBase und Ihrer lokalen "google-services.json". Sie müssen sicherstellen, dass beide Manifeste übereinstimmen

In der FireBase-Konsole gehen Sie zu "YourProject> Project OverView> Cloud Messaging" und sehen die "SenderID", die mit der "google-services.json" in Ihrem Android-Projekt übereinstimmen muss.

Das Beste, was Sie tun können, ist, die endgültige JSON-Datei von der Registerkarte "Allgemein" herunterzuladen und in Ihr Projekt einzufügen.

Diego Sanabria
quelle
1

Ich hatte den gleichen Fehler beim Versuch, eine Push-Benachrichtigung zu senden. Holen Sie sich die aktualisierte Datei google-services.json und ersetzen Sie sie durch diese. Hat für mich gearbeitet.

Karthikeyan Ve
quelle
0

Ich hatte das gleiche Problem und habe es folgendermaßen behoben:

  1. Gehen Sie zu Ihrer Google FCM-Konsole
  2. Wählen Sie Ihre App aus
  3. Im Menü auf der linken Seite finden Sie das Einstellungssymbol (Standardrad).
  4. Klicken Sie darauf und dann auf Projekteinstellungen
  5. Kopieren Sie nun Ihren Serverschlüssel und fügen Sie ihn in PHP ein

Voila ...

V. Sambor
quelle
0

Das Aktualisieren der Firebase-Initialisierung funktioniert bei mir.

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

Für mich war das Problem, dass ich die phonegap-plugin-pushin cordova verwendete und die App mit der Phonegap-App testete.

Das Problem dabei ist, dass die Phonegap-App dieses Plugins aus irgendeinem Grund abfängt und einen Dummy-Registrierungsschlüssel zurückgibt, unabhängig davon, welche Absender-ID Sie haben.

Damit es funktioniert (solange Sie alle Schlüssel richtig haben), müssen Sie Ihr Programm auf eine andere Weise testen, mit einem Emulator oder einer Android-Emulation über USB. Und Ihre Schlüssel werden übereinstimmen.

Hoffentlich spart dies jemandem etwas Zeit.

Pablo
quelle
0

Sie tun wahrscheinlich, was ich getan habe. GCM-Token ist nicht mehr dasselbe wie FCM. Überprüfen Sie, ob Sie die GCM-Token-ID anstelle von FCM abrufen. Überschreiben Sie einfach FirebaseInstanceIdService und stellen Sie sicher, dass Sie die richtige ID erhalten. Ich dachte einmal, sie wären gleich, aber jetzt nicht mehr. Ich loggte einen Test und sah. Nachdem Sie dies getan haben, aktualisieren Sie auch google-services.json, wie andere aus Sicherheitsgründen sagen.

j2emanue
quelle
0

Ich habe Tage damit verschwendet.

In meinem Fall bin ich diesem Blog gefolgt , um Postman zu verwenden und den Fehler mismatchsenderid zu erhalten. Zuvor bekam ichmessaging/mismatched-credential und die Leute berichteten, dass ihre Client-App mehrere Projekte verwendet.

Für mich habe ich jedoch eins zu eins, eine Web-App und ein Projekt. ABER ich ng servehoste alle Apps über den Standardport 4200. Unabhängig davon, auf welchem ​​Projekt / App-Paar ich mich entwickelt habe, habe ich immer das gleiche Token von meiner Client-Web-App erhalten AngularFireMessaging.requestToken- dieses Token war immer das Token, das bei meinem ersten Erstellen erstellt wurde Ausführen einer Firebase-App in Entwicklung.

Als Workaround starte ich verschiedene Apps / Projekte an verschiedenen Ports und erhalte die richtigen Token für die jeweiligen Projekte.

dkelosky
quelle
0

Hinweis: Ich hatte den ersten Teil des FCM-Tokens (zuvor :) abgeschnitten und der Fehler warMismatchSenderId

Mein Skript wurde korrigiert und jetzt funktioniert alles einwandfrei.

William Desportes
quelle
0

In meinem Fall hatte jemand APN-SSL-Zertifikate für meine App im Apple-Entwicklungsportal gelöscht.

  • Ich musste neue Zertifikate erstellen: Bezeichner / Meine AppId / Push-Benachrichtigungen / Bearbeiten.
  • Dann habe ich sie von der Konsole in das Firebase-Projekt hochgeladen: Projekteinstellungen / Cloud Messaging / iOS-App-Konfiguration / APNs-Zertifikate.

Dies löste das Problem.

Mihail Varbanov
quelle
0

In meinem Fall war es sehr einfach. Ich habe die falsche Registrierungs-ID aus der Datenbank abgerufen. Nachdem ich die richtige ID gezogen hatte, funktionierte es.

Iwan Ross
quelle
0

Ich hatte das gleiche Problem in meinem Projekt "react-native - node.js". Ich wollte Benachrichtigungen in Android senden. Alles war eingerichtet und funktionierte einwandfrei (dh ich konnte Benachrichtigungen von node.js senden und Benachrichtigungen auf einem Android-Gerät empfangen).

Nach ein paar Tagen musste ich ein anderes Firebase-Konto verwenden, also änderte ich die Datei google-services.json im Android- / App- Ordner meines Projekts und erstellte das Projekt neu. Als ich jedoch erneut versuchte, eine Benachrichtigung von meinem Server zu senden, wurde eine Fehlermeldung angezeigt:

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

Lösung:

die XML - Datei an der Stelle - app / build / erzeugt / res / google-services / {} build_type /values/values.xml wurde nicht automatisch aktualisiert , immer nach neuen Google-services.json . Es bestand immer noch aus alten Werten aus meiner vorherigen Datei google-services.json . Ich musste values.xml ändern Datei manuell .

So sieht die Datei app / build / generate / res / google-services / {build_type} /values/values.xml aus (Sie müssen sie manuell ändern, wenn sie nicht automatisch gemäß google-services.json aktualisiert wird ) -

<?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> 

Sie können auf diese Links verweisen:

  1. https://firebase.google.com/docs/projects/multiprojects
  2. Verarbeitung der JSON-Datei: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .
Mrunal Dhole
quelle
0

Ich hatte große Probleme herauszufinden, warum ich den Status "MismatchSenderId" erhielt. Ich habe die gms-Abhängigkeit im Stammverzeichnis hinzugefügt, build.gradleaber mein Fehler bestand darin, das gms-Plugin in der App nicht anzuwenden build.gradle.

Wenn Sie diese Zeile nicht in der App haben build.gradle, kann dies der Grund sein, warum die Benachrichtigung nicht funktioniert: apply plugin: 'com.google.gms.google-services'

MartLav
quelle
0

Ich habe festgestellt, dass Sie beim Erstellen einer Geräte-ID in GCM keine Push-Nachrichten über FCM mit dem neuen Serverschlüssel senden können, sondern den alten API-Schlüssel verwenden müssen.

cewe
quelle
0

Ich habe versucht, eine Benachrichtigung über die fcm-API "https://fcm.googleapis.com/fcm/send" vom Postboten zu senden. Der Serverschlüssel war in Ordnung und das Token wurde gut eingefügt, aber es wurde immer noch der Fehler "MismatchSenderId" angezeigt.

Dann führte die folgende Abhängigkeit in der Gradle-Datei auf der Android-Seite.

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

und es wurden Benachrichtigungen auf dem Gerät empfangen

shehzy
quelle
-3

Ich bekomme auch den gleichen Fehler. Ich habe den api_key kopiert und in google_services.json geändert. danach funktioniert es für mich

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

Versuche dies

Karthik Sridharan
quelle
-6

Sie haben einen Serverschlüssel wie diesen AIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVY im Abschnitt Einstellungen der firebase console console.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging .

Geben Sie den richtigen Schlüssel mit Ihrem Code an und versuchen Sie es erneut.

Hareesh
quelle
8
Ich verwende den richtigen Serverschlüssel. Wenn ich nicht wäre, würde ich "MismatchSenderId" für alle Anfragen erhalten und nicht für "einige von ihnen", wie in Frage erwähnt.
TareK Khoury