FCM получает MismatchSenderId

У меня есть приложение, которое использует Google FCM для отправки push-уведомлений.

Когда я отправляю push-уведомление группе пользователей, я получаю ответ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".

 kapil singh08 авг. 2019 г., 11:56
@Dylanthepiguy ты получил какое-нибудь решение?
 TareK Khoury16 июл. 2016 г., 08:14
@ Merlin1896 Нет, все еще возникают проблемы
 kapil singh08 авг. 2019 г., 11:33
@TareKKhoury Вы получили какое-нибудь решение ??
 Dylanthepiguy10 авг. 2019 г., 09:56
Я не могу вспомнить сейчас извините @kapilsingh
 Akhil Dad07 сент. 2016 г., 11:08
Убедитесь, что вы обновили файл google-services.json в приложении
 Eric12 сент. 2016 г., 12:30
Я тоже с этим сталкиваюсь. Я могу отправлять уведомления с консоли Firebase, но не с FCM.
 Dylanthepiguy19 янв. 2018 г., 00:58
Кому-нибудь удалось решить проблему за последние 2 года?
 AnZ29 июн. 2016 г., 10:26
Не могли бы вы показать код, как вы отправили это сообщение? Я мог бы знать причину проблемы ..
 Merlin189616 июл. 2016 г., 11:34
Я избавился от проблемы, но не могу точно сказать, что сделал трюк. Я удалил свое приложение из firebase, воссоздал его, удалил приложение с моего тестового устройства, чтобы оно получило новый UID от firebase, а затем оно заработало. Удаление приложения из firebase не изменило ключ сервера, поэтому мне не пришлось менять это в моем скрипте. Я действительно не знаю, что происходит.
 kyrax06 сент. 2016 г., 18:04
@TareKhoury У меня такая же проблема. Одно и то же приложение на разных телефонах. Некоторые работают, некоторые нет. Вопрос для меня прерывистый.
 TareK Khoury18 июн. 2016 г., 21:37
Да, тот же проект, то же приложение, тот же ключ сервера.
 TareK Khoury29 июн. 2016 г., 19:41
@AnZ Я добавил код к вопросу
 Hitendra Joshi03 авг. 2016 г., 14:57
@TareKhoury Я пытаюсь установить соединение FCM-XMPP на Android с помощьюхлопать Lib. Любая идея, как выполнить подключение. я собираюсьorg.jivesoftware.smack.SmackException $ NoResponseException: Ответ не получен в течение времени ожидания ответа. Тайм-аут был 5000 мс (~ 5 с). Используемый фильтр: фильтр не использовался или фильтр был пустым. после выполненияXMPPTCPConnection.login () вызов. Любое предложение!!
 AnZ30 июн. 2016 г., 11:25
@TareKhoury, спасибо. Прежде всего. Убедитесь, что ключ авторизации, который вы используетеServer Key (можно найти в консоли Firebase на вкладке сервера), а неAPI_KEY отgoogle-service.json, Во-вторых, убедитесь, что вы правильно указали пункт назначения. Например,to" : "/topics/yourtopic" если вы хотите отправить сообщение на все устройства (они должны сначала подписаться на эту тему). Или попробуйте отправить на определенное устройство, тогда необходимо ввести токен устройства (полученный при первом запуске в службе Firebase)cec5gH04....92IyHrB2K
 Merlin189615 июл. 2016 г., 14:47
Вы решили эту проблему? Я сталкиваюсь с той же проблемой!
 Arthur Thompson18 июн. 2016 г., 17:41
MismatchSenderId означает, что ваш клиент регистрируется на сервере, отличном от того, который вы используете для отправки. Все ваши клиенты регистрируются в одном проекте? Также не могли бы вы включить ответ MismatchSenderId в вопрос?

Ответы на вопрос(19)

У вас будет ключ от сервера примерно такAIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVY доступно внастройки секция пожарной консолиconsole.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging.

Укажите правильныйключ с вашим кодом и попробуйте еще раз.

 TareK Khoury28 июн. 2016 г., 22:01
Я использую правильный ключ сервера. Если бы я не был, я бы получил "MismatchSenderId" для всех запросов, а не для "некоторых из них", как упоминалось в вопросе.

Firebase обновил свои серверные ключи до новой версии. Используйте новые ключи вместо старых.

зайдите в настройки-> настройки проекта-> вкладка облачных сообщений

Может быть, это будет работать

 r1528 мая 2019 г., 10:19
Это не имеет никакого значения, если вы используете ключ сервера или старый ключ сервера

На самом деле есть много причин для этой проблемы. Мой был из-за Неверного пройденного токена. Я передавал тот же токен, сгенерированный из одного приложения, и использовал тот же токен в другом приложении. Как только токен обновлен, он работает для меня.

Обновление инициализации 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>

У меня была такая же проблема, и я исправил это так:

Зайдите в консоль Google fcmВыберите ваше приложениеВ левом меню найдите значок настроек (стандартное колесо)Нажмите на него и после нажмите на настройки проектаТеперь скопируйте ваш ключ сервера и вставьте его в php

Вуаля ...

Я тоже получаю такую ​​же ошибку. Я скопировал api_key и перехожу на google_services.json. после этого это работает для меня

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

попробуй это

Согласно ответу "MismatchSenderId", это несоответствие между FireBase и вашим локальным "google-services.json", вы должны убедиться, что оба манифеста совпадают

В консоли FireBase вы перейдете в «YourProject> Project OverView> Cloud Messaging» и увидите «SenderID», который ДОЛЖЕН совпадать с «google-services.json» в вашем проекте Android.

Лучшее, что вы можете сделать, это загрузить окончательный файл JSON с вкладки «Общие» и поместить его в свой проект.

Для меня проблема заключалась в том, что я использовалphonegap-plugin-push в Кордове, тестирование приложения с приложением phonegap.

Проблема заключается в том, что по какой-то причине с этим плагином приложение phonegap перехватывает его и возвращает фиктивный регистрационный ключ, независимо от того, какой у вас идентификатор отправителя.

Таким образом, чтобы заставить его работать (если у вас есть все ваши ключи правильно), нужно протестировать вашу программу другим способом, с помощью эмулятора или эмуляции Android через usb. И ваши ключи будут совпадать.

Надеюсь, это сэкономит кому-то время.

Убедитесь, что вы удалили весь код Parse из вашего приложения (библиотеки, приемники в AndroidManifest и т. Д.). Я обнаружил, что периодически push-уведомления не работали. По моим наблюдениям, он будет работать на новых установках, но не на обновлениях приложений из магазина Play.

Я считаю, что что-то внутреннее в Parse конфликтовало с FCM (Parse использует GCM, поэтому я предполагаю, что это связано с одновременным использованием GCM и FCM). Как только я разобрал все приемники и библиотеки Parse, все заработало отлично.

Мы потратили часы на решение этой проблемы. Мы обнаружили, что токен генерировался с использованием разных настроек аккаунта FCM (google-services.json), а уведомления устанавливались с использованием разных аккаунтов FCM. Когда мы синхронизировали оба, это работало как очарование.

 ehacinom01 нояб. 2018 г., 19:09
Это случилось со мной тоже. Убедитесь, что токен, сгенерированный для вашего телефона, является правильной средой сборки (dev / alpha / prod).

У меня такая же проблема. После нескольких часов, потраченных на это, я нашел это решение:

Сначала я проверяю, правильный ли ключ сервера или нет, он похож на AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXЗатем я проверяю идентификатор отправителя, как 79XXXXXXXX, это также было правильно.Основная проблема была вdevice_id (UDID) кому я должен отправить уведомление. На самом деле DeviceId мы получили на стороне Android вFCM отличается отGCM, Вы не можете использоватьGCM созданныйИдентификатор устройства вFCM.

Надеюсь, что это поможет вам. Спасибо

 Paras Diwan07 февр. 2019 г., 11:54
Система FCM поддерживает старые токены GCMdevelopers.google.com/cloud-messaging/faq
 Luis Milanese03 авг. 2017 г., 16:56
Вы мне очень помогли. Мне пришлось попросить разработчика приложения включить в код идентификатор отправителя, тогда мой FCM API KEY сработал. Большое спасибо.
 Nauman Khan04 авг. 2017 г., 17:14
Добро пожаловать. Я рад, что это помогает вам.
 voghDev04 мар. 2019 г., 12:37
Привет Чувак. Где вы размещаете идентификатор отправителя? Я вижу, что не пользуюсь им, и мне удалось отправить уведомления несколько дней назад. Заранее спасибо приятель
 Nauman Khan05 мар. 2019 г., 14:00
@PinkeshDarji на стороне приложения, у нас есть такая вещь, как каждый раз, когда пользователь входит в приложение, я обновляю UDID пользователя, таким образом мы получаем обновленный UDID (Device_Id) для старых пользователей.
 Nauman Khan05 мар. 2019 г., 13:58
Привет @voghDev из бэкэнда с использованием FCM Api (fcm.googleapis.com/fcm/sendотправкаУдостоверение личности отправителя в заголовках и на стороне приложения жеУдостоверение личности отправителя используется для создания UDID (device_Id)
 Emin Turk17 мая 2019 г., 11:40
-Первый проверяю, правильный ли ключ сервера или нет, он похож на AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Это исправило мою проблему. большое спасибо
 Pinkesh Darji31 июл. 2018 г., 11:29
Как мы можем затем отправить push-уведомление пользователям о том, как они уже зарегистрированы с токенами GCM в бэкенде, когда мы обновляем наше бэкэнд и приложение для Android до FCM. ?

Вы, вероятно, делаете то, что я делал. Маркер GCM больше не совпадает с FCM. проверьте, тянете ли вы идентификатор токена GCM вместо FCM. просто переопределите FirebaseInstanceIdService и убедитесь, что вы получаете правильный ID. я думал, что в один прекрасный момент они были одинаковыми, но теперь нет. Я зарегистрировал тест и увидел. после этого также обновите google-services.json, как говорят другие, в целях безопасности.

У меня была такая же ошибка при попытке отправить push-уведомление. Получите обновленный файл google-services.json и замените его. Работал на меня.

Просто к вашему сведению. Я столкнулся с этой ошибкой, хотя яругаться Приложение для Android, которое я тестировал, было создано с использованием самого последнего файла google-services.json, и я мог отправить его из консоли FCM в приложение. Я перестроил приложение после выполненияClean Project и теперь я могу отправить приложение с токеном FCM, который оно регистрирует. Так что, может быть, попробуйте чистую перестройку, прежде чем слишком долго биться головой о стену.

 Indranil Dutta18 июл. 2019 г., 12:59
Это кажется мелочью, но оказывает большое влияние. Большое спасибо за идею.

Это работало для меня:

ПРОВЕРЬТЕ, КАКОЙ ПРОЕКТ FIREBASE ВАШ ТЕКУЩИЙ ПРОЕКТ ANDROID СОЕДИНЕН И ИСПОЛЬЗУЕТСЯКлюч сервера ИЗ ЭТОГО ПРОЕКТА.

Я использовал ключ сервера из другого проекта Firebase (скажем, Project 2). Я использовал тот же ключ сервера, который был связан с моим проектом Android (скажем, Project 1), и он работал. По моему опыту, использование одного приложения Firebase для одного целого проекта Android, казалось, решило проблему.

 vk2604 апр. 2019 г., 14:09
Я столкнулся с такой же ситуацией. Старый проект связан с приложением для Android. И серверный ключ нового проекта не работает (возвращает ошибку MismatchSenderId). После того, как я удалил приложение для Android в старом проекте, новый ключ сервера из нового проекта стал работать.

что работает для меня:
Я обнаружил, что senderId отличается от номера проекта в консоли FCM
поэтому я заново скачал google-services.json и все работает нормально

В моем случае я просто ошибался насчет учетных данных проекта: используя google-services.json из одного проекта и ключ сервера из другого.

 wonsuc31 окт. 2018 г., 17:02
Вы сэкономили мое время!

Здравствуйте, я заметил, что когда в GCM создается идентификатор устройства, вы не можете отправлять push-сообщения через FCM, используя новый ключ сервера, вы должны использовать старый API-ключ.

проверятьgcm_sender_id в manifest.json Если несоответствие - исправить, но вам нужно сделать новых подписчиков для нового идентификатора отправителя. Существующие абоненты ломаются.

Ваш ответ на вопрос