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

Как я могу решить эту проблему?

8 ответов


использовал ли ваш сервер новый идентификатор регистрации, возвращенный сервером GCM в ваше приложение? У меня была эта проблема, если я пытался отправить сообщение идентификаторам регистрации, которые выдаются старым сервером C2DM.

а также дважды проверьте идентификатор отправителя и API_KEY, они должны совпадать, иначе вы получите эту ошибку MismatchSenderId. В консоли Google API посмотрите URL вашего проекта:

https://code.google.com/apis/console/#project:xxxxxxxxxxx

xxxxxxxxx-это идентификатор проекта, который является отправителем ИДЕНТИФИКАТОР.

и убедитесь, что ключ API принадлежит " ключ для серверных приложений (с блокировкой IP)"


несоответствие происходит, когда вы не используете числовой идентификатор. ID проекта не отправитель!! Мне потребовалось 9 часов, чтобы выяснить это. Для всей путаницы, созданной google, проверьте следующую ссылку, чтобы получить числовой идентификатор.

https://console.cloud.google.com

вместо

https://console.developers.google.com

надеюсь, что это помогает!!

обновление:- Все снова изменилось. Теперь идентификатор отправителя с огневая база.

на https://console.firebase.google.com и выберите ваш проект. В разделе Настройки - > облачные сообщения Вы можете найти идентификатор отправителя.

и это работает!


пожалуйста, запустите ниже скрипт в вашем терминале

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

он передаст сообщение, если это удалось или не удалось


недавно я столкнулся с той же проблемой, и я попробовал разные значения для "gcm_sender_id" на основе идентификатора проекта. Однако значение " gcm_sender_id "должно быть установлено в"номер проекта".

вы можете найти это значение в разделе: меню > IAM & Admin > настройки.

характеристики: номер проекта GCM


InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope)

authorizedEntity-номер проекта сервера


ваше приложение для android должно исправить 12-значный номер id (он же номер проекта GCM). Если это 12-значное число неверно, то вы также получите эту ошибку.

этот 12-значный номер находится в вашей консоли Google Play под вашим конкретным приложением "Service & API" - > "связанные идентификаторы отправителя"


Если используется для родного Android, проверьте свой :

<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" />

надеюсь, что это помогает!!


используйте идентификатор отправителя и ключ API, созданный здесь:http://developers.google.com вместо этого (сначала найдите Google Cloud Messaging и следуйте инструкциям).