Warum erhalte ich "MismatchSenderId" von der GCM-Serverseite?

76

Ich versuche, einen Push-Dienst für meine Android-App zu erstellen, und folge dazu der Dokumentation und dem Beispiel von Google GCM:

Ich kann meine Android-App registrieren / die Registrierung aufheben. Auf meiner Serverseite kann ich sehen, dass ein Abonnement registriert ist. Wenn ich jedoch versuche, eine Nachricht vom Server an meine Android-App zu senden, wird immer die folgende Fehlermeldung angezeigt:

Fehler beim Senden der Nachricht an Gerät Nr. 0: MismatchSenderId

Für meine Android-App verwende ich SENDER_ID = 200000000001.

Und für meine Serverseite verwende ich, wie Google sagt, API_KEY = AIzxxxxxxxxxxxxxxxxxxxxxxxxxxxXXXXxxxx

Ich bin diesem Dokument gefolgt:

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

Ich habe GCM auch in meinem Google API-Bereich aktiviert, erhalte jedoch die nervige Fehlermeldung.

Wie kann ich dieses Problem beheben?

Seyed Vahid Hashemi
quelle
Überprüfen Sie in manifest.json Datei für gcm Absender ID
Shivappa

Antworten:

68

Hat Ihr Server die neue Registrierungs-ID verwendet, die vom GCM-Server an Ihre App zurückgegeben wurde? Ich hatte dieses Problem, wenn ich versuchte, eine Nachricht an Registrierungs-IDs zu senden, die vom alten C2DM-Server ausgegeben wurden.

Überprüfen Sie auch die Absender-ID und API_KEY. Sie müssen übereinstimmen. Andernfalls wird der Fehler MismatchSenderId angezeigt. Überprüfen Sie in der Google API-Konsole die URL Ihres Projekts:

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

Die xxxxxxxxx ist die Projekt-ID, die die Absender-ID ist.

Stellen Sie sicher, dass der API-Schlüssel zu "Schlüssel für Server-Apps (mit IP-Sperre)" gehört.

Azgolfer
quelle
Ich habe hier große Zweifel. Ist es möglich, meine Anwendung zum Laden anderer Mobiltelefone mit nur einer SERIALID bereitzustellen?
Seyed Vahid Hashemi
3
Haben Sie sich die GCM-Architekturübersicht developer.android.com/guide/google/gcm/gcm.html angesehen ? Alle Android-Telefone, die Ihre App verwenden, registrieren sich bei GCM mit der Absender-ID Ihrer App und erhalten eine eindeutige GCM-Registrierungs-ID, die Sie auf Ihrem Server speichern müssen. Wenn Sie eine Nachricht an alle Ihre Benutzer senden möchten, müssen Sie alle diese Registrierungs-IDs durchgehen.
Azgolfer
7
Das ist wirklich albern, aber es funktioniert. Die auf der Seite im Dashboard aufgeführte Projekt-ID ist eine benannte ID, die ich auswählen muss. Sie müssen jedoch die numerische ID aus der URL verwenden, was sehr verwirrend ist.
Redth
2
Ich habe ewig gebraucht, um diese Antwort zu finden @azgolfer du bist eine Legende. Jungs, überprüfen Sie Ihre neue Registrierungs-ID! Das hat es für mich behoben.
SergioM
5
Diese Informationen sind möglicherweise veraltet. Jetzt sollten Sie Ihr Projekt NUMBER
Ethan Fischer
24

Eine Nichtübereinstimmung tritt auf, wenn Sie die numerische ID nicht verwenden. Projekt ID IST NICHT SENDER ID !! Ich habe 9 Stunden gebraucht, um das herauszufinden. Überprüfen Sie bei aller von Google verursachten Verwirrung den folgenden Link, um die numerische ID zu erhalten.

https://console.cloud.google.com

Anstatt von

https://console.developers.google.com

Ich hoffe es hilft!!

Update: - Die Dinge haben sich wieder geändert. Jetzt ist die Absender-ID mit Firebase.

Gehen Sie zu https://console.firebase.google.com und wählen Sie Ihr Projekt aus. Unter Einstellungen -> Cloud-Messaging finden Sie die Absender-ID.

Und es funktioniert!

Ajay Singh
quelle
Oh Gott! Dein Beitrag hat mir Stunden gespart ... Danke!
Peter Moskala
7

Bitte führen Sie das folgende Skript in Ihrem Terminal aus

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

Es wird die Nachricht angezeigt, wenn dies erfolgreich ist oder fehlgeschlagen ist

Raj Kumar
quelle
6
MismatchSenderId, weil Sie sich auf demselben Gerät mit unterschiedlichen Schlüsseln angemeldet haben. Um dieses Problem zu lösen, deinstallieren Sie die App, führen Sie sie erneut aus und aktualisieren Sie den Registrierungsschlüssel. und dann führen Sie das CURL-Skript in Ihrem Teminal aus, das ich oben poste. Es gibt eine Erfolgsmeldung und Sie erhalten eine Benachrichtigung an Ihr Gerät
Raj Kumar
4

Ich bin kürzlich auf dasselbe Problem gestoßen und habe verschiedene Werte für "gcm_sender_id" basierend auf der Projekt-ID ausprobiert. Der Wert "gcm_sender_id" muss jedoch auf "Projektnummer" gesetzt werden.

Sie finden diesen Wert unter: Menü> IAM & Admin> Einstellungen.

Siehe Screenshot: GCM-Projektnummer

mpavel
quelle
2
InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope)

AuthorizedEntity ist die Projektnummer des Servers

Ivan Vizuet
quelle
2

Ihre Android-App muss die 12-stellige Nummern-ID (auch bekannt als GCM-Projektnummer) korrigieren. Wenn diese 12-stellige Nummer falsch ist, wird auch dieser Fehler angezeigt.

Diese 12-stellige Nummer befindet sich in Ihrer Google Play Console unter Ihrer spezifischen App "Service & API" -> "VERBUNDENE SENDER-IDS".

Britc
quelle
2

Dies geschieht , wenn der Server - Schlüssel und S ender ID Parameter HTTP - Anforderung nicht zueinander passen. Grundsätzlich müssen sowohl die Server-ID als auch der Serverschlüssel zum selben Firebase-Projekt gehören. Bitte beachten Sie das folgende Bild. Wenn diese Parameter aus verschiedenen Firebase-Projekten gemischt werden, wird der Fehler MismatchSenderId verursacht Geben Sie hier die Bildbeschreibung ein

Chamath Jeevan
quelle
0

Überprüfen Sie die google-services.jsonDatei im appOrdner Ihres Android-Projekts. Generieren Sie eine neue über die Firebase-Konsole, wenn Sie sich nicht sicher sind. Ich habe diesen Fehler in zwei Fällen erhalten.

  1. Ich habe ein Test-Firebase-Projekt mit einer Testanwendung verwendet (die die richtige google-services.jsonDatei enthielt ). Dann habe ich versucht, eine Push-Benachrichtigung an eine andere Anwendung zu senden und habe diesen Fehler erhalten ('"error": "MismatchSenderId"'). Ich habe verstanden, dass die zweite Anwendung an ein anderes Firebase-Projekt mit einem anderen gebunden war google-services.json. Da die Serverschlüssel unterschiedlich sind, sollte die Anforderung neu geschrieben werden.

  2. Ich habe google-services.jsondie Anwendung geändert , weil ich das Test- Firebase-Projekt durch ein tatsächliches ersetzen wollte . Ich habe die richtige google-services.jsonDatei generiert , die Anfrage geändert, aber immer wieder diesen Fehler erhalten. Am nächsten Tag reparierte es sich. Ich vermute, dass Firebase nicht synchron aktualisiert wird.

Um einen Serverschlüssel für die Anforderung zu erhalten, öffnen Sie https://console.firebase.google.com und wählen Sie ein geeignetes Projekt aus.

Geben Sie hier die Bildbeschreibung ein

Fügen Sie es dann in die Anfrage ein.

Geben Sie hier die Bildbeschreibung ein

CoolMind
quelle
-1

Verwenden Sie stattdessen die hier generierte Absender-ID und den API-Schlüssel: http://developers.google.com (suchen Sie zuerst nach Google Cloud Messaging und befolgen Sie die Anweisungen).

Riefvan
quelle
-1

Wenn Sie es für natives Android verwenden, überprüfen Sie Ihre AndroidMaifest.xmlDatei:

<meta-data
        android:name="onesignal_google_project_number"
        android:value="str:1234567890" />  
  <!--             its is correct. -->

stattdessen

   <meta-data
        android:name="onesignal_google_project_number"
        android:value="@string/google_project_number" />

Ich hoffe es hilft!!

Iman Marashi
quelle