Почему я получаю "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, если вы не уверены. Я получил эту ошибку в двух случаях.

  1. Я использовал тестовый проект Firebase с тестовым приложением (которое содержало правильный файл google-services.json). Затем я попытался отправить push-уведомление в другое приложение и получил эту ошибку ("error": "MismatchSenderId"). Я понял, что второе приложение было связано с другим проектом Firebase с другим google-services.json. Поскольку ключи сервера различны, запрос должен быть переписан.

  2. Я изменил 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" />

Надеюсь, что это поможет!