Чому я отримую “MismatchSenderId” з боку сервера GCM?


76

Я намагаюся створити 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 на моїй панелі Google API, але я отримаю це надокучливе повідомлення про помилку.

Як я можу вирішити цю проблему?


Перевірте файл manifest.json на ідентифікатор відправника
gcm

Відповіді:


68

Чи використовував ваш сервер новий реєстраційний ідентифікатор, повернений сервером GCM у ваш додаток? У мене була ця проблема, коли я намагався надіслати повідомлення на реєстраційні ідентифікатори, які видаються старим сервером C2DM.

А також перевірте ідентифікатор відправника та API_KEY, вони повинні збігатися, інакше ви отримаєте цю помилку MismatchSenderId. У консолі Google API подивіться URL-адресу вашого проекту:

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

Xxxxxxxxx - це ідентифікатор проекту, який є ідентифікатором відправника.

І переконайтесь, що ключ API належить до «Ключа для серверних програм (із блокуванням IP)»


У мене є величезні сумніви. Чи можна розгорнути свою програму для завантаження інших мобільних телефонів лише одним SERIALID?
Seyed Vahid Hashemi

3
Чи заглядали ви на огляд архітектури GCM developer.android.com/guide/google/gcm/gcm.html ? Кожен телефон Android, який використовує ваш додаток, зареєструється в GCM з ідентифікатором відправника вашого додатка, і вони отримають унікальний ідентифікатор реєстрації GCM, який ви повинні зберегти на своєму сервері. Якщо ви хочете надіслати повідомлення всім своїм користувачам, вам потрібно пройти всі ці реєстраційні ідентифікатори.
azgolfer

7
Це справді безглуздо, але це працює. Ідентифікатор проекту, вказаний на сторінці на інформаційній панелі, - це іменований ідентифікатор, який я повинен був вибрати, однак ви повинні використовувати числовий ідентифікатор із URL-адреси, що дуже заплутано.
Redth

2
Мені знадобилася вік, щоб знайти цю відповідь @azgolfer, ти легенда. Хлопці, перевірте свій новий реєстраційний ідентифікатор! Це мені це виправило.
SergioM

5
Ця інформація може бути застарілою. Тепер ви повинні використати свій проект НОМЕР
Ітан Фішер

24

Невідповідність відбувається, коли ви не використовуєте числовий ідентифікатор. Ідентифікатор проекту НЕ ІДЕНТИФІКАТОР ВІДПРАВЛЕННЯ !! На це мені зайняло 9 годин. Для всієї плутанини, створеної Google, перевірте наступне посилання, щоб отримати числовий ідентифікатор.

https://console.cloud.google.com

замість

https://console.developers.google.com

Сподіваюся, це допоможе !!

Оновлення: - Справа знову змінилася. Тепер ідентифікатор відправника з Firebase.

Перейдіть на сторінку https://console.firebase.google.com та виберіть свій проект. У налаштуваннях -> обмін повідомленнями в хмарі ви можете знайти ідентифікатор відправника.

І це працює!


О, Боже! Ваш допис заощадив години ... Дякую!
Пітер Москала,

7

Запустіть скрипт нижче у своєму терміналі

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

воно дасть повідомлення, якщо воно вдалося чи не вдалося


6
MismatchSenderId, оскільки на одному пристрої ви входили з різними клавішами. щоб вирішити цю проблему, видаліть програму та запустіть її знову та оновіть ключ реєстрації. а потім запустіть скрипт CURL у вашому теміналі, який я розміщу над ним, дасть повідомлення про успіх, і ви отримаєте повідомлення на свій пристрій
Радж Кумар,

4

Нещодавно я зіткнувся з тією ж проблемою і спробував різні значення для "gcm_sender_id" на основі ідентифікатора проекту. Однак значення "gcm_sender_id" має бути встановлене на "Номер проекту".

Ви можете знайти це значення в: Меню> IAM та адміністратор> Налаштування.

Дивіться знімок екрана: Номер проекту GCM


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

odobrenEntity - це номер проекту сервера


2

Ваш додаток для Android повинен виправити 12-значний ідентифікатор номера (він же номер проекту GCM). Якщо це 12-значне число неправильне, ви також отримаєте цю помилку.

Цей 12-значний номер міститься у вашій консолі Google Play під вашим конкретним додатком, "Сервіс та API" -> "ПОВ'ЯЗАНІ ІДЕНТИФІКАТОРИ ВІДПРАВНИКА"


2

Це трапляється, коли ключ сервера та параметри ідентифікатора відправника HTTP-запит не збігаються між собою. В основному і ідентифікатор сервера, і ключ сервера повинні належати одному проекту Firebase. Будь ласка, зверніться до зображення нижче. У разі змішування цих параметрів із відповідних проектів Firebase призведе до помилки MismatchSenderId введіть тут опис зображення


0

Перевірте 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 та виберіть відповідний проект.

введіть тут опис зображення

Потім вставте його в запит.

введіть тут опис зображення



-1

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


-1

Якщо використовується для власного 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" />

Сподіваюся, це допоможе !!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.