Чому я отримую “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.