Почему я получаю "MismatchSenderId" со стороны сервера GCM?
Я пытаюсь создать услугу push для своего приложения для Android, и я следую документации и примеру Google GCM по этому вопросу:
Я могу зарегистрировать/отменить регистрацию своего приложения для Android. С моей стороны, я вижу, что у меня зарегистрирована одна подписка, но когда я пытаюсь отправить сообщение с сервера на свое приложение для Android, я всегда получаю следующую ошибку:
Ошибка отправки сообщения устройству # 0: MismatchSenderId
Для моего Android-приложения я использую SENDER_ID = 200000000001.
И для моей серверной стороны, когда Google говорит, что я использую API_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs
Я следил за этим документом:
http://developer.android.com/guide/google/gcm/demo.html
Я также включил GCM в свою панель API Google, но я получаю это раздражающее сообщение об ошибке.
Как я могу исправить эту проблему?
Ответы
Ответ 1
Использовал ли ваш сервер новый идентификатор регистрации, возвращенный сервером GCM, в ваше приложение? У меня возникла эта проблема, если вы пытаетесь отправить сообщение на регистрационные идентификаторы, выданные старым сервером C2DM.
И также дважды проверьте идентификатор отправителя и API_KEY, они должны совпадать или вы получите ошибку MismatchSenderId. В консоли API Google просмотрите URL-адрес вашего проекта:
https://code.google.com/apis/console/#project:xxxxxxxxxxx
xxxxxxxxx - это идентификатор проекта, который является идентификатором отправителя.
И убедитесь, что API-ключ принадлежит "Ключ для серверных приложений (с блокировкой IP-адресов)"
Ответ 2
Несоответствие происходит, если вы не используете числовой идентификатор. ИД проекта НЕ ИДЕНТИВНЫЙ ИДЕНТИФИКАЦИЯ!! Мне понадобилось 9 часов, чтобы понять это. Для всей путаницы, созданной Google, проверьте следующую ссылку, чтобы получить числовой идентификатор.
https://console.cloud.google.com
вместо
https://console.developers.google.com
Надеюсь, что это поможет!
Обновление: -
Все изменилось. Теперь идентификатор отправителя с firebase.
Перейдите в https://console.firebase.google.com и выберите свой проект. В настройках → облачный обмен сообщениями вы можете найти идентификатор отправителя.
И он работает!
Ответ 3
Пройдите ниже script в терминале
curl -X POST \
-H "Authorization: key= write here api_key" \
-H "Content-Type: application/json" \
-d '{
"registration_ids": [
"write here reg_id generated by gcm"
],
"data": {
"message": "Manual push notification from Rajkumar"
},
"priority": "high"
}' \
https://android.googleapis.com/gcm/send
он выдает сообщение, если оно выполнено успешно или неудачно
Ответ 4
Недавно я столкнулся с той же проблемой, и я попробовал разные значения для "gcm_sender_id" на основе идентификатора проекта. Однако значение "gcm_sender_id" должно быть установлено в "Номер проекта".
Это значение можно найти в: Меню > IAM и Admin > Настройки.
Смотрите снимок экрана: Номер проекта GCM
Ответ 5
InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope)
authorizedEntity - номер проекта сервера
Ответ 6
Вашему андроидному приложению необходимо исправить 12-значный идентификатор номера (aka GCM Project Number). Если это 12-значное число неверно, вы также получите эту ошибку.
Этот 12-значный номер найден в вашей консоли Google Play в вашем конкретном приложении "Сервис и API" → "LINKED SENDER IDS"
Ответ 7
Это происходит, когда HTTP-запрос параметров ключа сервера и S идентификатора не совпадает. По сути, и идентификатор сервера, и ключ сервера должны принадлежать одному и тому же проекту Firebase. Пожалуйста, обратитесь к изображению ниже. В случае смешивания этих параметров из разных проектов Firebase возникнет ошибка MismatchSenderId
![enter image description here]()
Ответ 8
Проверьте файл google-services.json
в папке app
вашего проекта Android. Создайте новый из консоли Firebase, если вы не уверены. Я получил эту ошибку в двух случаях.
Я использовал тестовый проект Firebase с тестовым приложением (которое содержало правильный файл google-services.json
). Затем я попытался отправить push-уведомление в другое приложение и получил эту ошибку ("error": "MismatchSenderId"). Я понял, что второе приложение было связано с другим проектом Firebase с другим google-services.json
. Поскольку ключи сервера различны, запрос должен быть переписан.
Я изменил google-services.json
в приложении, потому что хотел заменить тестовый проект Firebase реальным. Я сгенерировал правильный файл google-services.json
, изменил запрос, но продолжал получать эту ошибку. На следующий день все исправилось. Я подозреваю, что Firebase не обновляется синхронно.
Чтобы получить ключ сервера для запроса, откройте https://console.firebase.google.com и выберите соответствующий проект.
![enter image description here]()
Затем вставьте его в запрос.
![enter image description here]()
Ответ 9
Используйте идентификатор отправителя и API-ключ, созданный здесь: http://developers.google.com вместо этого (сначала выполните навигацию по облачным службам Google и следуйте инструкциям).
Ответ 10
Если вы используете собственный Android, проверьте свой AndroidMaifest.xml
файл:
<meta-data
android:name="onesignal_google_project_number"
android:value="str:1234567890" />
<!-- its is correct. -->
вместо
<meta-data
android:name="onesignal_google_project_number"
android:value="@string/google_project_number" />
Надеюсь, что это поможет!