FCM obtiene MismatchSenderId


82

Tengo una aplicación que usa Google FCM para enviar notificaciones push.

Cuando envío una notificación automática a un grupo de usuarios, obtengo una respuesta de MismatchSenderIdalgunos de ellos. Sin embargo, todos los usuarios tienen exactamente la misma aplicación. ¿Cómo pueden algunos usuarios obtener una respuesta de éxito y otros un MismatchSenderId?

Investigué mucho y me aseguré de haber agregado todos los requisitos previos que necesita FCM.

¿Alguna sugerencia?

EDITAR:

Respuesta de muestra:

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

EDITAR 2:

Aquí está el código de envío del lado del servidor (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 );

ACTUALIZAR:

Parece que el problema se ha resuelto con las actualizaciones del SDK. Ahora estoy usando la última versión com.google.firebase:firebase-messaging:9.6.1, ya no obtengo "MismatchSenderId".


3
MismatchSenderId significa que su cliente se está registrando con un servidor diferente al que está usando para enviar. ¿Todos sus clientes se registran en el mismo proyecto? ¿También podría incluir la respuesta MismatchSenderId en la pregunta?
Arthur Thompson

Sí, mismo proyecto, misma aplicación, misma clave de servidor.
TareK Khoury

¿Podría mostrar el código de cómo envió este mensaje? Podría saber la causa del problema ..
AnZ

3
@TareKhoury, gracias. Ante todo. Asegúrese de que la clave de autorización que usa sea Server Key(se puede encontrar en firebase console en la pestaña del servidor) y no API_KEYde google-service.json. En segundo lugar, asegúrese de establecer el destino correctamente. Por ejemplo, to" : "/topics/yourtopic"si desea enviar un mensaje a todos los dispositivos (primero deben suscribirse a ese tema). O intente enviar a un dispositivo en particular, luego es necesario escribir el token del dispositivo (recibido en el primer inicio en el servicio de base de fuego)cec5gH04....92IyHrB2K
AnZ

3
¿Alguien logró resolver el problema en los últimos 2 años?
Dylanthepiguy

Respuestas:


35

Firebase ha actualizado sus claves de servidor a una nueva versión. Utilice claves nuevas en lugar de las antiguas.

vaya a configuración-> configuración del proyecto-> pestaña de mensajería en la nube

ingrese la descripción de la imagen aquí


No hace ninguna diferencia si está utilizando la clave del servidor O la clave del servidor heredado
R15

23

Encontré esta solución:

  • Primero verifico que la clave del servidor es correcta o no, que es como AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • Luego verifico que la identificación del remitente como 79XXXXXXXX también era correcta.
  • El problema principal fue en device_ID (UDID) a quien tengo que enviar la notificación. En realidad, DeviceId que tenemos del lado de Android en FCM es diferente a GCM . No puede usar DeviceId creado por GCM en FCM .

Me ayudaste mucho. Tuve que pedirle al desarrollador de la aplicación que incluyera la identificación del remitente en el código, luego mi CLAVE API de FCM funcionó. Muchas gracias.
Luis Milanese

3
Cuando actualizamos nuestro backend y la aplicación de Android a FCM, ¿cómo podemos enviar una notificación push a los usuarios que ya están registrados con tokens de GCM en el backend? ?
Pinkesh Darji

El sistema FCM admite tokens de GCM antiguos developers.google.com/cloud-messaging/faq
Paras Diwan

Hola hombre. ¿Dónde colocas el senderId? Veo que no lo estoy usando y he podido enviar notificaciones hace unos días. Gracias de antemano amigo
voghDev

Hola, @voghDev desde backend usando FCM Api ( fcm.googleapis.com/fcm/send ) enviando senderId en los encabezados y en el lado de la aplicación, el mismo SenderId se usa para crear UDID (device_Id)
Nauman Khan

15

ESTO FUNCIONÓ PARA MÍ:

  • COMPRUEBE CON QUÉ PROYECTO DE FIREBASE ESTÁ VINCULADO SU PROYECTO DE ANDROID ACTUAL Y UTILICE LA CLAVE DE SERVIDOR DE ESE PROYECTO.

Estaba usando la clave del servidor de un proyecto de base de fuego diferente (por ejemplo, Proyecto 2). Usé la misma clave de servidor que estaba vinculada con mi proyecto de Android (Say Project 1) y funcionó. En mi experiencia, el uso de una aplicación de base de fuego para todo un proyecto de Android pareció solucionar el problema.


Me enfrenté a la misma situación. Proyecto antiguo vinculado a la aplicación de Android. Y la clave del servidor del nuevo proyecto no funciona (error de retorno MismatchSenderId). Después de eliminar la aplicación de Android en el proyecto anterior, la nueva clave del servidor del nuevo proyecto funcionó.
vk26

11

En mi caso, me equivoqué sobre las credenciales del proyecto: uso de google-services.json de un proyecto y clave de servidor de otro.


8

Solo un FYI. Me encontré con este error, aunque juro que la aplicación de Android que estaba probando se creó con el último / mejor archivo google-services.json y pude enviarlo desde la consola FCM a la aplicación. Reconstruí la aplicación después de hacer una Clean Projecty ahora puedo enviarla a la aplicación con el token FCM que registra. Entonces, tal vez intente una reconstrucción limpia antes de golpearse la cabeza contra la pared durante demasiado tiempo.


esta fue la solución para mi!
Gomino

6

Pasamos horas y horas para resolver este problema. Descubrimos que el token se estaba generando usando diferentes configuraciones de cuenta de FCM (google-services.json) y la notificación se estaba configurando usando una cuenta de FCM diferente. Cuando sincronizamos ambos, funcionó de maravilla.


Esto me pasó a mí también. Asegúrese al 100% de que el token generado para su teléfono sea el entorno de compilación correcto (dev / alpha / prod)
ehacinom

4

Descubrí que senderIdes diferente del número de proyecto en la consola de FCM,
así que volví a descargar google-services.json y todo funciona bien


4

Mi problema se resolvió ingresando la clave correcta como se muestra a continuación.

Copie la clave del servidor como esta imagen ingrese la descripción de la imagen aquí

Y luego copia este código en post man como esta imagen ingrese la descripción de la imagen aquí

y el cuerpo es una fila como esta imagen

ingrese la descripción de la imagen aquí NOTA:

  • Debes agregar key = antes de la clave del servidor en el encabezado
  • Asegúrese de ingresar las claves de encabezado correctamente (Authorization = "key = ..." y ContentType = "application / json")
  • Ha enviado la solicitud a la dirección correcta ( https://fcm.googleapis.com/fcm/send y método de publicación)

3
  • Crucé verificado todas las credenciales

  • Se agregó una nueva clave de servidor y se eliminó la anterior.

  • Se descargó google-services.json nuevamente

Nada resolvió el problema

Luego solo limpio el proyecto y luego reconstruyo el proyecto. Después de eso, está funcionando bien


Me salvas el día: D
Tuan Luong

2

Asegúrese de eliminar todo el código Parse de su aplicación (bibliotecas, receptores en AndroidManifest, etc.). Descubrí que las notificaciones push intermitentes no funcionaban. Según mis observaciones, funcionaría en instalaciones nuevas, pero no en actualizaciones de aplicaciones de Play Store.

Creo que algo interno de Parse estaba en conflicto con FCM (Parse usa GCM, así que supongo que tuvo que ver con el uso de GCM y FCM simultáneamente). Tan pronto como eliminé todos los receptores y bibliotecas de Parse, las cosas funcionaron muy bien.


2

En realidad, hay muchas razones para este problema. El mío fue debido a que se pasó un token no válido. Estaba pasando el mismo token generado desde una aplicación y usando el mismo token en otra aplicación. Una vez actualizado el token, me funciona.


2

Para eliminar este error de identificación de remitente no coincidente en fcm

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

se produjo un error,

  1. Entonces, primero requerimos, en FCM, registrar la aplicación, por ejemplo, MyDemoApplication

  2. Después de eso, FCM generará la clave del servidor, es AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHUdecir, la identificación del remitente, es decir, 346252831806estos formatos como estos.

  3. Después, en Android Studio, nuestro proyecto se conecta a estos proyectos creados por FCM, es decir, MyDemoApplication

  4. Y el paso más importante es el token del dispositivo o la identificación de registro. Estos token deben crearse en Android Studio.

  5. Después de eso, usando la identificación del remitente y la clave de API en el proyecto de API web, definitivamente recibirá una notificación


1

marque gcm_sender_id en manifest.json Si no coincide, es correcto, pero necesita crear nuevos suscriptores para la nueva ID de remitente. Existe ruptura de suscriptores.


1

Según la respuesta "MismatchSenderId", se trata de una discrepancia entre FireBase y su "google-services.json" local, debe asegurarse de que ambos manifiestos coincidan

En la consola FireBase, vaya a "YourProject> Project OverView> Cloud Messaging" y verá el "SenderID", que DEBE coincidir con "google-services.json" en su proyecto de Android.

Lo mejor que puede hacer es descargar el archivo json final de la pestaña "General" y colocarlo en su proyecto.


1

Tuve el mismo error al intentar enviar una notificación push. Obtenga el archivo google-services.json actualizado y reemplácelo por él. Trabajó para mi.


0

Tuve el mismo problema y lo solucioné así:

  1. Vaya a su consola de google fcm
  2. Seleccione su aplicación
  3. En el menú del lado izquierdo, busque el icono de configuración (rueda estándar)
  4. Haga clic en él y luego haga clic en la configuración del proyecto
  5. Ahora copie la clave de su servidor y péguela en php

Voila ...


0

Actualizar la inicialización de Firebase funciona para mí.

<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

Para mí, el problema era que estaba usando el phonegap-plugin-pushen cordova, probando la aplicación con la aplicación phonegap.

El problema con esto es que, por alguna razón, con este complemento, la aplicación phonegap lo intercepta y devuelve una clave de registro ficticia, sin importar qué ID de remitente tenga.

Entonces, para que funcione (siempre que tenga todas las claves correctas) es probar su programa de alguna otra manera, con un emulador o emulación de Android a través de USB. Y tus llaves coincidirán.

Con suerte, esto le ahorrará a alguien algo de tiempo.


0

probablemente estés haciendo lo que yo estaba haciendo. El token de GCM ya no es lo mismo que FCM. compruebe si está extrayendo el ID del token de GCM en lugar de FCM. simplemente anule FirebaseInstanceIdService y asegúrese de obtener la identificación correcta. En un momento pensé que eran iguales, pero ahora no. Registré una prueba y vi. después de hacer eso, actualice también google-services.json como dicen otros como medida de seguridad.


0

Perdí días en esto.

En mi caso, seguí este blog para usar Postman y obtuve el error de identificación no coincidente. Anteriormente, estaba recibiendomessaging/mismatched-credential , y la gente informó que su aplicación cliente usaba varios proyectos.

Sin embargo, para mí, tengo uno a uno, una aplicación web y un proyecto. PERO , alojo todas las aplicaciones a través ng servedel puerto predeterminado 4200. Entonces, independientemente del par de proyecto / aplicación en el que estuviera desarrollando, siempre obtendría el mismo token de la aplicación web de mi cliente usandoAngularFireMessaging.requestToken ; este token siempre fue el token creado en mi primer ejecución de una aplicación firebase en desarrollo.

Como solución, comienzo diferentes aplicaciones / proyectos en diferentes puertos y obtengo los tokens adecuados para los proyectos respectivos.


0

Nota: había truncado la primera parte del token FCM (antes :) y el error eraMismatchSenderId

Arreglado mi guión y ahora todo funciona bien.


0

En mi caso, alguien había eliminado los certificados SSL de APN para mi aplicación en el portal de desarrollo de Apple.

  • Necesitaba crear nuevos certificados: Identifiers / My AppId / Push Notifications / Edit.
  • Luego los subí al proyecto de Firebase desde la consola: Configuración del proyecto / Mensajería en la nube / Configuración de la aplicación iOS / Certificados APN.

Esto resolvió el problema.


0

En mi caso fue muy sencillo. Estaba extrayendo el registrationId incorrecto de la base de datos. Después de sacar la identificación correcta, funcionó.


0

Tuve el mismo problema en mi proyecto react-native - node.js. Quería enviar notificaciones en Android. Todo estaba configurado y funcionando bien (es decir, pude enviar notificaciones desde node.js y recibir notificaciones en el dispositivo Android).

Después de unos días, tuve que usar una cuenta de firebase diferente, así que cambié el archivo google-services.json en la carpeta android / app de mi proyecto y reconstruí el proyecto. Pero, cuando intenté enviar una notificación desde mi servidor una vez más, recibí un error:

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

Solución:

el archivo XML en la ubicación - app / build / generate / res / google-services / {build_type} /values/values.xml no se actualizaba automáticamente de acuerdo con el nuevo google-services.json . Todavía constaba de valores antiguos de mi archivo google-services.json anterior . Tuve que cambiar el archivo values.xml manualmente.

Así es como se ve el archivo app / build / generate / res / google-services / {build_type} /values/values.xml (debe cambiarlo manualmente si no se actualiza automáticamente de acuerdo con 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> 

Puede consultar estos enlaces:

  1. https://firebase.google.com/docs/projects/multiprojects
  2. Procesando el archivo JSON: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .

0

Tuve un gran problema para averiguar por qué estaba obteniendo un estado "MismatchSenderId". Agregué la dependencia de gms en la raíz, build.gradlepero mi error en realidad no estaba aplicando el complemento de gms en la aplicaciónbuild.gradle .

Si no tiene esta línea en la aplicación build.gradle, esta podría ser la razón por la que la notificación no funciona: apply plugin: 'com.google.gms.google-services'


0

Me he dado cuenta de que cuando se crea una identificación de dispositivo en GCM, no puede enviar mensajes push a través de FCM usando la nueva clave de servidor, debe usar la clave API anterior.


0

Estaba intentando enviar una notificación utilizando la API de FCM "https://fcm.googleapis.com/fcm/send" del cartero. La clave del servidor estaba bien y el token se pegó bien, pero seguía recibiendo el error "MismatchSenderId".

Luego introdujo la siguiente dependencia en el archivo gradle en el lado de Android.

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

y comenzó a recibir notificaciones en el dispositivo


-3

También obtengo el mismo error. Copié el api_key y lo cambié a google_services.json. después de eso funcionó para mí

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

prueba esto


-6

Usted tendrá una clave de servidor algo como esto AIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-Kvy disponible en la configuración de la sección de la consola de base de fuego console.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging .

Especifique la clave correcta con su código y vuelva a intentarlo.


8
Estoy usando la clave de servidor correcta. Si no fuera así, obtendría "MismatchSenderId" para todas las solicitudes y no para "algunas de ellas" como se menciona en la pregunta.
TareK Khoury
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.