¿Por qué obtengo "MismatchSenderId" del lado del servidor de GCM?


76

Estoy tratando de crear un servicio push para mi aplicación de Android, y sigo la documentación y el ejemplo de Google GCM para este asunto:

Puedo registrar / anular el registro de mi aplicación de Android. Desde el lado de mi servidor, puedo ver que tengo una suscripción registrada, pero cuando intento enviar un mensaje desde el servidor a mi aplicación de Android, siempre aparece el siguiente error:

Error al enviar el mensaje al dispositivo # 0: MismatchSenderId

Para mi aplicación de Android, uso SENDER_ID = 200000000001.

Y para mi lado del servidor, como dice Google, uso API_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs

Seguí este documento:

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

También habilité GCM en mi panel de API de Google, pero recibiré ese molesto mensaje de error.

¿Como puedo solucionar este problema?


Verifique el archivo manifest.json para la identificación del remitente de
gcm

Respuestas:


68

¿Su servidor usó el nuevo ID de registro devuelto por el servidor de GCM a su aplicación? Tuve este problema, si intentaba enviar un mensaje a las ID de registro proporcionadas por el servidor C2DM antiguo.

Y también verifique dos veces la ID del remitente y la API_KEY, deben coincidir o, de lo contrario, obtendrá el error MismatchSenderId. En la consola API de Google, mire la URL de su proyecto:

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

Xxxxxxxxx es el ID del proyecto, que es el ID del remitente.

Y asegúrese de que la clave API pertenece a 'Clave para aplicaciones de servidor (con bloqueo de IP)'


Tengo una gran duda aquí. ¿Es posible implementar mi aplicación para cargar otros teléfonos móviles con un solo SERIALID?
Seyed Vahid Hashemi

3
¿Ha consultado la descripción general de la arquitectura de GCM developer.android.com/guide/google/gcm/gcm.html ? Todos los teléfonos Android que utilicen su aplicación se registrarán en GCM con el ID de remitente de su aplicación y recibirán un ID de registro de GCM único, que debe almacenar en su servidor. Si desea enviar un mensaje a todos sus usuarios, debe revisar todos esos identificadores de registro.
azgolfer

7
Esto es realmente tonto, pero funciona. El ID del proyecto que aparece en la página del panel de control es un ID con nombre que tengo que elegir, sin embargo, debe usar el ID numérico de la URL, lo cual es muy confuso.
Redth

2
Me tomó años encontrar esta respuesta @azgolfer eres una leyenda. ¡Chicos, verifiquen su nueva identificación de registro! Eso me lo arregló.
SergioM

5
Esta información puede estar desactualizada. Ahora debería utilizar su proyecto NÚMERO
Ethan Fischer

24

La discrepancia ocurre cuando no usa el ID numérico. ¡La ID del proyecto NO ES LA ID DEL REMITENTE! Me tomó 9 horas darme cuenta de esto. Para toda la confusión creada por Google, consulte el siguiente enlace para obtener una identificación numérica.

https://console.cloud.google.com

en vez de

https://console.developers.google.com

¡¡Espero eso ayude!!

Actualización: - Las cosas han cambiado de nuevo. Ahora la identificación del remitente está con firebase.

Vaya a https://console.firebase.google.com y seleccione su proyecto. En configuración -> mensajería en la nube, puede encontrar la identificación del remitente.

¡Y funciona!


¡Oh Dios! Tu publicación me ahorró horas ... ¡Gracias!
Peter Moskala

7

Ejecute el siguiente script en su terminal

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

dará el mensaje si tiene éxito o no


6
MismatchSenderId porque en el mismo dispositivo ha iniciado sesión con diferentes claves. Para resolver este problema, desinstale la aplicación y ejecútela nuevamente y actualice la clave de registro. y luego ejecute el script CURL en su terminal que publico arriba, le dará un mensaje de éxito y recibirá una notificación en su dispositivo
Raj Kumar

4

Encontré el mismo problema recientemente y probé diferentes valores para "gcm_sender_id" según el ID del proyecto. Sin embargo, el valor "gcm_sender_id" debe establecerse en "Número de proyecto".

Puede encontrar este valor en: Menú> IAM y Admin> Configuración.

Ver captura de pantalla: Número de proyecto de GCM


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

AuthorizedEntity es el número de proyecto del servidor


2

Su aplicación de Android debe corregir la identificación del número de 12 dígitos (también conocido como Número de proyecto de GCM). Si este número de 12 dígitos es incorrecto, también obtendrá este error.

Este número de 12 dígitos se encuentra en su Google Play Console en su aplicación específica, 'Servicio y API' -> 'ID DE REMITENTE VINCULADOS'


2

Esto sucede cuando la clave del servidor y la solicitud HTTP de los parámetros de ID del servidor no coinciden. Básicamente, tanto la ID del servidor como la clave del servidor deben pertenecer al mismo proyecto de base de fuego. Consulte la siguiente imagen. En caso de mezclar estos parámetros de diferentes proyectos de Firebase, se producirá el error MismatchSenderId ingrese la descripción de la imagen aquí


0

Verifique el google-services.jsonarchivo en la appcarpeta de su proyecto de Android. Genere uno nuevo desde Firebase console si no está seguro. Recibí este error en dos casos.

  1. Usé un proyecto de prueba de Firebase con la aplicación de prueba (que contenía el google-services.jsonarchivo correcto ). Luego intenté enviar una notificación automática a otra aplicación y obtuve este error ('"error": "MismatchSenderId"'). Entendí que la segunda aplicación estaba vinculada a otro proyecto de Firebase con diferente google-services.json. Debido a que las claves del servidor son diferentes, la solicitud debe reescribirse.

  2. Cambié google-services.jsonen la aplicación, porque quería reemplazar el proyecto de prueba de Firebase con un archivo . Genere el google-services.jsonarchivo correcto , cambié la solicitud, pero seguí recibiendo este error. Al día siguiente se arregló solo. Sospecho que Firebase no se actualiza sincrónicamente.

Para obtener una clave de servidor para la solicitud, abra https://console.firebase.google.com y seleccione un proyecto apropiado.

ingrese la descripción de la imagen aquí

Luego péguelo en la solicitud.

ingrese la descripción de la imagen aquí




-1

Si se usa para Android nativo, verifique su AndroidMaifest.xmlarchivo:

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

en lugar

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

¡¡Espero eso ayude!!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.