2012-07-03 4 views
59

Я пытаюсь создать услугу push для своего приложения для Android, и я следую за документацией Google GCM и примером для этого вопроса:Зачем мне «MismatchSenderId» со стороны сервера GCM?

Я могу зарегистрировать/отменить регистрацию своего приложения для Android. С моей стороны сервера, я могу видеть, что я одна подписки на учет, но когда я пытаюсь отправить сообщение с сервера на мой Android приложения, которое я всегда получаю следующее сообщение об ошибке:

Error sending message to device #0: MismatchSenderId

Для моего Android приложения, я использую SENDER_ID = 200000000001.

И для моей стороны сервера, как Google говорит, что я использую api_key = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs

Я последовал за этот документ:

http://developer.android.com/guide/google/gcm/demo.html

Я также включил GCM в свою панель API Google, но я получу это раздражающее сообщение об ошибке.

Как исправить эту проблему?

+0

Проверить в manifest.json файл для идентификатора отправителя GCM – Shivappa

ответ

60

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

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

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

XXXXXXXXX это идентификатор проекта, который является идентификатор отправителя.

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

+0

У меня есть огромные сомнения здесь. Можно ли развернуть мое приложение для загрузки других мобильных телефонов только с одним SERIALID? –

+3

Вы просмотрели обзор архитектуры GCM http://developer.android.com/guide/google/gcm/gcm.html? Каждый Android-телефон, который использует ваше приложение, зарегистрируется в GCM с идентификатором отправителя вашего приложения, и они получат уникальный идентификатор регистрации GCM, который вы должны хранить на своем сервере. Если вы хотите отправить сообщение всем своим пользователям, вам необходимо пройти через все эти идентификаторы регистрации. – azgolfer

+6

Это действительно глупо, но это работает. Идентификатор проекта, указанный на странице на панели управления, - это именованный идентификатор, который мне нужно выбрать, однако вы должны использовать числовой идентификатор из URL-адреса, который очень запутан. – Redth

6

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

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 

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

+5

MismatchSenderId, потому что с того же устройства вы вошли в систему с разными ключами. для решения этой проблемы удалите приложение и запустите его и обновите регистрационный ключ. а затем запустите сценарий CURL в своем тезисе, который я опубликую выше, он даст сообщение об успешном завершении, и вы получите уведомление на свое устройство. –

0

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

20

Несоответствие происходит, если вы не используете числовой идентификатор. ИД проекта НЕ ИДЕНТИВНЫЙ ИДЕНТИФИКАЦИЯ !! Мне понадобилось 9 часов, чтобы понять это. Для всей путаницы, созданной Google, проверьте следующую ссылку, чтобы получить числовой идентификатор.

https://console.cloud.google.com

вместо

https://console.developers.google.com

Надеется, что это помогает !!

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

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

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

+0

О, Боже! Ваше сообщение спас мне часы ... Спасибо! –

0

Если использовать для родной 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" /> 

Надеется, что это помогает !!

3

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

Вы можете найти это значение под: Меню> IAM & Администратор> Настройки.

Смотрите скриншот: GCM Project Number

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

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

1

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

Этот 12-значный номер находится в вашем Google Play консоли под конкретного приложения 'Service & API' -> 'Linked Sender IDS'