Ответ 1
Firebase обновила свои серверные ключи до новой версии. Вместо старых используйте новые ключи.
перейти к настройкам- > настройкам проекта- > вкладке облачных сообщений
Возможно, он будет работать
У меня есть приложение, которое использует 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".
Firebase обновила свои серверные ключи до новой версии. Вместо старых используйте новые ключи.
перейти к настройкам- > настройкам проекта- > вкладке облачных сообщений
Возможно, он будет работать
У меня такая же проблема. После нескольких часов, потраченных на это, я нашел это решение:
Надеюсь, что это поможет вам. Спасибо
Это работало для меня:
Я использовал ключ сервера из другого проекта Firebase (скажем, Project 2). Я использовал тот же ключ сервера, который был связан с моим проектом Android (скажем, Project 1), и он работал. По моему опыту, использование одного приложения Firebase для всего проекта Android, казалось, решило проблему.
В моем случае я просто ошибался насчет учетных данных проекта: использовал google-services.json из одного проекта и ключ сервера из другого.
что работает для меня:
Я обнаружил, что senderId отличается от номера проекта в консоли FCM
поэтому я перезагрузил google-services.json и все работает отлично
Убедитесь, что вы удалили весь код Parse из своего приложения (библиотеки, приемники в AndroidManifest и т.д.). Я обнаружил, что прерывистые push-уведомления не работают. По моим наблюдениям, это будет работать с новыми установками, но не с обновлениями приложений из магазина воспроизведения.
Я считаю, что что-то внутреннее для Parse противоречило FCM (Parse использует GCM, поэтому я предполагаю, что это связано с использованием GCM и FCM одновременно). Как только я вырвал все приемники и библиотеки Parse, все отлично поработало.
Мы потратили часы на решение этой проблемы. Мы обнаружили, что токен генерировался с использованием разных настроек аккаунта FCM (google-services.json), а уведомления устанавливались с использованием разных аккаунтов FCM. Когда мы синхронизировали оба, это работало как очарование.
проверить gcm_sender_id в manifest.json Если несоответствие - правильно, но вам нужно сделать новых подписчиков для нового идентификатора отправителя. Существует разрыв подписчиков.
Согласно ответу "MismatchSenderId", это несоответствие между FireBase и вашим локальным "google-services.json", вы должны убедиться, что оба манифеста совпадают
В консоли FireBase вы перейдете в "YourProject> Project OverView> Cloud Messaging" и увидите "SenderID", который ДОЛЖЕН совпадать с "google-services.json" в вашем проекте Android.
Лучшее, что вы можете сделать, это загрузить окончательный JSON файл с вкладки "Общие" и поместить его в свой проект.
У меня была такая же ошибка при попытке отправить push-уведомление. Получите обновленный файл google-services.json и замените его. Работал на меня.
На самом деле есть много причин для этой проблемы. Мой был из-за Неверного пройденного токена. Я передавал тот же токен, сгенерированный из одного приложения, и использовал тот же токен в другом приложении. Как только токен обновлен, он работает для меня.
Просто к вашему сведению. Я столкнулся с этой ошибкой, хотя я клянусь, что приложение для Android, которое я тестировал, было создано с последним/самым большим файлом google-services.json, и я мог отправить его из консоли FCM в приложение. Я перестроил приложение после выполнения Clean Project
и теперь могу отправлять в приложение маркер FCM, который он регистрирует. Так что, может быть, попробуйте чистую перестройку, прежде чем слишком долго биться головой о стену.
У меня была та же проблема, и я исправил ее так:
Вуаля...
Обновление инициализации 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>
Для меня проблема была в том, что я использовал phonegap-plugin-push
в cordova, тестируя приложение с приложением phonegap.
Проблема в том, что по какой-то причине с этим плагином приложение phonegap перехватывает его и возвращает фиктивный регистрационный ключ, независимо от того, какой у вас идентификатор отправителя.
Так что заставить его работать (при условии, что у вас все ключи в порядке) - значит протестировать вашу программу другим способом, с помощью эмулятора или эмуляции Android через usb. И ваши ключи будут совпадать.
Надеюсь, это сэкономит кому-то время.
Вы, вероятно, делаете то, что я делал. Маркер GCM больше не совпадает с FCM. проверьте, вытягиваете ли вы идентификатор токена GCM вместо FCM. просто переопределите FirebaseInstanceIdService и убедитесь, что вы получаете правильный ID. Я думал, что когда-то они были такими же, но сейчас нет. Я зарегистрировал тест и увидел. после этого также обновите google-services.json, как говорят другие, в целях безопасности.
Здравствуйте, я заметил, что когда в GCM создается идентификатор устройства, вы не можете отправлять push-сообщения через FCM, используя новый ключ сервера, вы должны использовать старый API-ключ.
Я потратил дни на это.
В моем случае я следил за этим блогом, чтобы использовать Postman и получить ошибку mismatchsenderid. Ранее я получал messaging/mismatched-credential
, и люди сообщали, что их клиентское приложение использовало несколько проектов.
Однако для меня у меня есть один к одному, веб-приложение и проект. НО, я размещаю все приложения через ng serve
на порте по умолчанию 4200. Поэтому независимо от того, на какой паре проект/приложение я разрабатывал, я всегда получал один и тот же токен из своего клиентского веб-приложения, используя AngularFireMessaging.requestToken
- этот токен всегда был токеном созданный на моем первом запуске приложения Firebase в разработке.
В качестве обходного пути я запускаю разные приложения/проекты на разных портах и получаю соответствующие токены для соответствующих проектов.
У меня были большие проблемы с выяснением, почему я получил статус "MismatchSenderId".
Я добавил зависимость gms в корень build.gradle
, но моя ошибка фактически не заключалась в применении плагина gms в приложении build.gradle
.
Если у вас нет этой строки в приложении build.gradle
, это может быть причиной того, что уведомление не работает:
apply plugin: 'com.google.gms.google-services'
Может быть, это может помочь кому-то ура
Примечание. Я обрезал первую часть токена FCM (до :
), и ошибка была MismatchSenderId
Исправил мой скрипт и теперь все отлично работает.
Я также получаю ту же ошибку. Я скопировал api_key и перешел в google_services.json. после этого он работает для меня
"api_key": [
{
"current_key": "********************"
}
],
попробуйте это
У вас будет ключ сервера, похожий на этот AIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVY, доступный в разделе Настройки консоли firebase console.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging.
Укажите правильный ключ с кодом и повторите попытку.