FCM получает MismatchSenderId


88

У меня есть приложение, которое использует 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.


4
MismatchSenderId означает, что ваш клиент регистрируется на сервере, отличном от того, который вы используете для отправки. Все ли ваши клиенты регистрируются в одном проекте? Также не могли бы вы включить в вопрос ответ MismatchSenderId?
Артур Томпсон

Да, тот же проект, то же приложение, тот же ключ сервера.
TareK Khoury

Не могли бы вы показать код того, как вы отправили это сообщение? Я могу знать причину проблемы ..
AnZ

3
@TareKhoury, спасибо. Прежде всего. Убедитесь, что вы используете ключ авторизации Server Key(его можно найти в консоли firebase на вкладке сервера), а не API_KEYиз google-service.json. Во-вторых, убедитесь, что вы правильно указали пункт назначения. Например, to" : "/topics/yourtopic"если вы хотите отправить сообщение на все устройства (они должны сначала подписаться на эту тему). Или попробуйте отправить на конкретное устройство, тогда необходимо ввести токен устройства (полученный при первом запуске в службе cec5gH04....92IyHrB2K
firebase

3
Кому-нибудь удалось решить проблему за последние 2 года?
Dylanthepiguy

Ответы:


36

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

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

введите описание изображения здесь


Нет никакой разницы, используете ли вы ключ сервера ИЛИ ключ
R15

23

Я нашел такое решение:

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

Вы мне очень помогли. Мне пришлось попросить разработчика приложения включить идентификатор отправителя в код, и тогда мой КЛЮЧ API FCM сработал. Большое спасибо.
Луис Миланезе

3
Когда мы обновляем наш бэкэнд и приложение Android до FCM, как мы можем затем отправить push-уведомление пользователям, которые уже зарегистрированы с помощью токенов GCM в бэкэнде. ?
Пинкеш Дарджи

Система FCM поддерживает старые токены GCM developers.google.com/cloud-messaging/faq
Парас Диван,

Привет дружище. Где разместить senderId? Я вижу, что не использую его, и несколько дней назад мне удалось отправлять уведомления. Заранее
спасибо, дружище

Привет, @voghDev из бэкэнда с использованием FCM Api ( fcm.googleapis.com/fcm/send ), отправляющего senderId в заголовках, а на стороне приложения тот же SenderId используется для создания UDID (device_Id)
Науман Хан

17

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

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

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


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

11

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


11

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


это было решение для меня!
Gomino

В обоих проектах используется новый FCM, и это все еще оставалось проблемой. Спас мой день!
Кристиан Колб,

6

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


Это случилось и со мной. Убедитесь на 100%, что токен, сгенерированный для вашего телефона, является правильной средой сборки (dev / alpha / prod)
ehacinom 01

4

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


4

Моя проблема была решена путем ввода правильного ключа, как показано ниже.

Скопируйте ключ сервера, как это изображение введите описание изображения здесь

А затем скопируйте этот код в почтовый ящик, как это изображение введите описание изображения здесь

и тело в ряд, как на этой картинке

введите описание изображения здесь ЗАМЕТКА:

  • Вы должны добавить ключ = перед ключом сервера в заголовке
  • Убедитесь, что вы правильно ввели ключи заголовка (Authorization = "key = ..." и ContentType = "application / json")
  • Вы отправили запрос на правильный адрес ( https://fcm.googleapis.com/fcm/send и метод Post)

3
  • Я перепроверил все учетные данные

  • Добавлен новый ключ сервера и удален старый

  • Снова скачал google-services.json

Ничего не решило проблему

Затем я просто очищаю проект, а затем перестраиваю проект, после чего он работает нормально.


Ты спасешь мой день: D
Туан Луонг

2

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

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


2

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


2

Для устранения этой ошибки при несоответствии идентификатора отправителя в fcm

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

произошла ошибка,

  1. Итак, нам нужно сначала, в FCM, зарегистрировать приложение, например MyDemoApplication

  2. После этого FCM сгенерирует ключ сервера, т. AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHUЕ. И идентификатор отправителя, т. 346252831806Е. В таком формате.

  3. После того, как в Android Studio наш проект подключается к этому проекту, созданному FCM, то есть MyDemoApplication

  4. И самый важный шаг - это токен устройства или идентификатор регистрации. Эти токены должны быть созданы в Android Studio ..

  5. После этого, используя идентификатор отправителя и ключ API в проекте веб-API, вы обязательно получите уведомление


1

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


1

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

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

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


1

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


0

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

  1. Перейдите в консоль google fcm
  2. Выберите ваше приложение
  3. В меню слева найдите значок настроек (стандартное колесо)
  4. Нажмите на нее и после нажмите на настройки проекта
  5. Теперь скопируйте ключ сервера и вставьте его в php.

Вуаля ...


0

У меня работает обновление инициализации 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>

0

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

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

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

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


0

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


0

Я потратил на это целые дни.

В моем случае я подписался на этот блог, чтобы использовать Postman и получить ошибку mismatchsenderid. Раньше я получалmessaging/mismatched-credential , и люди сообщали, что их клиентское приложение использует несколько проектов.

Однако для меня у меня есть индивидуальный подход, веб-приложение и проект. НО , я размещаю все приложения через ng serveпорт по умолчанию 4200. Таким образом, независимо от того, в какой паре проект / приложение я разрабатывал, я всегда получал один и тот же токен из своего клиентского веб-приложения, используяAngularFireMessaging.requestToken - этот токен всегда был токеном, созданным на моем первом запуск приложения firebase в разработке.

В качестве обходного пути я запускаю разные приложения / проекты на разных портах и ​​получаю подходящие токены для соответствующих проектов.


0

Примечание. Я обрезал первую часть токена FCM (до : ), и ошибка былаMismatchSenderId

Исправил мой скрипт и теперь все работает нормально.


0

В моем случае кто-то удалил сертификаты APN SSL для моего приложения на портале разработки Apple.

  • Мне нужно было создать новые сертификаты: Идентификаторы / Мой AppId / Push-уведомления / Редактировать.
  • Затем я загрузил их в проект Firebase из консоли: Настройки проекта / Облачные сообщения / Конфигурация приложения iOS / Сертификаты APN.

Это решило проблему.


0

В моем случае это было очень просто. Я извлекал из базы данных неправильный идентификатор RegistrationId. После того, как я выбрал правильный идентификатор, все заработало.


0

У меня была такая же проблема в моем проекте response-native - node.js. Хотел отправлять уведомления в андроиде. Все было настроено и работало нормально (т.е. я мог отправлять уведомления с node.js и получать уведомления на устройстве Android).

Через несколько дней мне пришлось использовать другую учетную запись firebase, поэтому я изменил файл google-services.json в папке android / app моего проекта и перестроил проект. Но когда я снова попытался отправить уведомление с моего сервера, у меня возникла ошибка -

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

Решение:

XML-файл в расположении - app / build / generated / res / google-services / {build_type} /values/values.xml не обновлялся автоматически в соответствии с новым google-services.json . Он по-прежнему состоял из старых значений из моего предыдущего файла google-services.json . Пришлось изменить values.xml вручную файл .

Так выглядит файл app / build / generated / res / google-services / {build_type} /values/values.xml (вам нужно изменить его вручную, если он не обновляется автоматически в соответствии с 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> 

Вы можете обратиться к этим ссылкам:

  1. https://firebase.google.com/docs/projects/multiprojects
  2. Обработка файла JSON: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .

0

У меня были большие проблемы с выяснением, почему я получал статус "MismatchSenderId". Я добавил зависимость gms в корень, build.gradleно моя ошибка заключалась в том, что плагин gms не применялся в приложении build.gradle.

Если у вас нет этой строки в приложении build.gradle, это может быть причиной того, что уведомление не работает: apply plugin: 'com.google.gms.google-services'


0

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


0

Я пытался отправить уведомление, используя fcm api "https://fcm.googleapis.com/fcm/send" от почтальона. Ключ сервера в порядке, и токен вставлен правильно, но по-прежнему выдает ошибку «MismatchSenderId».

Затем представил следующую зависимость в файле gradle на стороне Android.

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

и он начал получать уведомления на устройстве


-3

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

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

попробуй это


-6

У вас будет серверный ключ вроде этого AIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVY, доступный в разделе настроек консоли firebase console.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging .

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


8
Я использую правильный ключ сервера. Если бы я не был, я бы получил "MismatchSenderId" для всех запросов, а не для "некоторых из них", как упоминалось в вопросе.
TareK Khoury
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.