Подтвердить что ты не робот

FCM получает MismatchSenderId

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

Когда я отправляю push-уведомление группе пользователей, я получаю ответ MismatchSenderId для некоторых из них. Хотя все пользователи имеют то же самое приложение. Как некоторые пользователи могут получить успешный ответ, а другие получают MismatchSenderId?

Я много исследовал и убедился, что добавил все предпосылки, необходимые FCM.

Любые предложения?

EDIT:

Пример ответа:

{"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 );

UPDATE:

Кажется, что проблема решена с обновлениями SDK. Я использую теперь последний com.google.firebase:firebase-messaging:9.6.1, я больше не получаю "MismatchSenderId".

4b9b3361

Ответ 1

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

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

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

Возможно, он будет работать

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

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

Вуаля...

Ответ 14

Обновление инициализации firebase работает для меня..

<script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
 <script>
  // Initialize Firebase
  // TODO: Replace with your project 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>

Ответ 15

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

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

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

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

Ответ 16

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

Ответ 17

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

Ответ 18

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

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

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

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

Ответ 19

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

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

Может быть, это может помочь кому-то ура

Ответ 20

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

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

Ответ 21

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

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

попробуйте это