Мне удалось протестировать свой код GCM.

Но точно такой же код, я не смог получить толчок GCM и получил:

Ошибка GCM: не зарегистрировано.

41
LKM 3 Ноя 2014 в 19:05
3
Почти невозможно помочь вам с вашим недостаточным объяснением.
 – 
T-D
22 Июл 2015 в 23:10
1
@T-D Прости за это... Я уже решил этот вопрос, спасибо за искренность!
 – 
LKM
25 Июл 2015 в 15:08
У меня такая же проблема @LKM. Не могли бы вы помочь мне с этим?
 – 
Mamta Kaundal
24 Авг 2018 в 07:56

8 ответов

Лучший ответ

Ответ GCM Not Registered означает следующее: "Если это NotRegistered, вам следует удалить регистрационный идентификатор из базы данных вашего сервера, потому что приложение было удалено с устройства или у него нет широковещательного приемника, настроенного для приема com. google.android.c2dm.intent.RECEIVE намерения ". из документации. Проверьте, в каком случае вы получаете эту ошибку, когда приложение удаляется с устройства или вы описываете неверный широковещательный приемник в AndroidManifest. Функциональность GCM можно проверить с помощью моего тестового сервера GCM. Надеюсь, это тебе поможет.

54
Hakan Fıstık 2 Мар 2018 в 18:07
Не могли бы вы рассказать мне, как узнать, какие идентификаторы не зарегистрированы на стороне сервера, чтобы я мог удалить их из своей БД.
 – 
Sudhanshu Gaur
10 Сен 2015 в 22:29
Конечно, есть только один способ узнать, когда вам нужно удалить идентификатор регистрации из вашей базы данных на сервере. Получение ошибки «NotRegistered» с сервера GCM означает, что Registration_id, который вы пытаетесь использовать, недействителен и должен быть удален. Также ваш сервер должен быть готов к обработке ответа cannonical_id от GCM. Я объяснил, что означает cannonical_id stackoverflow.com/questions/26826869/…
 – 
Samik
10 Сен 2015 в 22:35
Также вы можете диагностировать свой registration_id через мой тестовый push-сервер 1-dot-sigma-freedom-752.appspot.com/gcmpusher.jsp
 – 
Samik
10 Сен 2015 в 22:43
1
Привет, у меня странная проблема с GCM в моем приложении. В моем GCMRegistrationService, когда я получаю токен из InstanceId API, иногда возвращаемый токен недействителен, и его использование дает ошибку «NotRegistered». В основном это происходит, когда пользователь удалил приложение, а затем снова установил его. Во время отладки я принудительно запустил GCMInstanceIdListener из adb, и API InstanceID дал новый токен, который работает. По сути, первый токен, который я получаю, неверен, а второй работает. Любая идея об этом?
 – 
akshayt23
2 Апр 2016 в 10:27
Итак, убедитесь, что ваш клиент не запрашивает токен слишком много раз, он должен запрашивать только один или два (включая обновление версии приложения). Во-вторых, убедитесь, что ваш сервер правильно обрабатывает поле cannonical_id и при необходимости заменяет старый токен новым. Один из этих факторов может повлиять на появление ошибки "NotRegistered". Кроме того, убедитесь, что ваш сервер использует тот же токен, который был получен вашим клиентом, т. е. ваш клиент должен надежно передавать токен на сервер.
 – 
Samik
4 Апр 2016 в 11:11

Если вы используете устройство для тестирования, вам необходимо удалить InstanceID перед получением токена и повторным тестированием, потому что после перезаписи APK он отменяет регистрацию этого InstanceId, и вы получаете ошибку NotRegistered. Итак, в вашем классе RegisterIntentService в функции onHandleIntent выполните следующие действия:

InstanceID instanceID = InstanceID.getInstance(this);
try
{
    instanceID.deleteInstanceID();
} catch(IOException e) 
{
    e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
18
Flexo 19 Дек 2016 в 01:11
Вы делаете это только в отладочных сборках?
 – 
Jeremy
14 Июл 2016 в 18:44
Да только в режиме отладки
 – 
Rhodesie
19 Июл 2016 в 05:12
Причина, по которой первая копия была удалена модератором, видна вам в комментариях под ней. Воспроизведено здесь: «Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Опубликуйте один хороший ответ, затем проголосуйте/отметьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, адаптируйте свои ответы к вопросу».
 – 
halfer
19 Дек 2016 в 00:47

Not Registered происходит, когда GCM считает, что устройство не может обработать сообщение. Это происходит, если приложение было удалено или неправильно настроено для обработки сообщения:

enter image description here

Основываясь на ответах @Samik и @ O'Rilla, я бы предложил следующие шаги:

  1. Удалите текущую установку с устройства Android
  2. Убедитесь, что у вас есть <receiver> и <sender> определены в узле <application> в AndroidManifest.xml.
  3. Убедитесь, что у вас правильный <category android:name="COM.COMPANY.YOURAPP" /> в своем <receiver>
  4. Убедитесь, что реализация Receiver верна
9
Roozbeh Zabihollahi 10 Июл 2016 в 21:51
Шаг 2 исправил мой - глупая оплошность, но ваш ответ сэкономил время после нескольких дней попыток найти основную причину. Спасибо @Roozbeh
 – 
RobbiewOnline
14 Июл 2017 в 21:37

Если вы действительно думаете, что ваш код правильный, но по-прежнему получаете ошибку

{"error": "NotRegistered"} 

Попробуйте вручную удалить приложение с телефона и снова запустить его (ваше устройство получит новый регистрационный идентификатор).

По крайней мере, в моем случае проблема решилась!

5
halfer 19 Дек 2016 в 00:45
В моем случае проблема также была решена! Я попытался удалить InstanceID и снова попытаться отправить запрос. Но мне это удалось только тогда, когда я удалил приложение (и мне не нужно было удалять instanceID, как я пытался раньше)
 – 
Alexey Shevelyov
31 Янв 2017 в 02:38

У меня была эта ошибка, когда у меня был приемник gcm вне приложения в файле манифеста. Переместил ресивер в область применения и все заработало. Теперь очень счастливый кролик.

<application>
...
<receiver>
...
</receiver>
...
</application>
2
G O'Rilla 7 Окт 2015 в 18:38

Я использовал старый устаревший код для GCM:

if (gcm == null) {
                gcm = GoogleCloudMessaging.getInstance(this);
            }
            String regId = gcm.register(SENDER_ID);
            msg = "Device registered, registration ID=" + regId;

И при попытке перейти на новый способ:

InstanceID instanceID = InstanceID.getInstance(this);
            String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Я получал ту же ошибку, и она сводила меня с ума два целых дня.

Попробовав все в книге, что исправлено, это отключение GCM в консоли разработчика, повторное включение его, а затем переход сюда: https://developers.google.com/mobile/add, чтобы создать новый файл google-services.json для моего приложения Android.

Также обратите внимание, что RegistrationIntentService должен находиться в корне вашего пакета, иначе он не сработает! (см. этот пример для реализации gcm в Android: https://github.com/google/gcm)

Надеюсь, это поможет кому-то, потому что я потерял на это дни !!!! > <

2
Micro 10 Мар 2016 в 02:43

Учетная запись Google является обязательным требованием для устройств под управлением Android 4.0.4 или более ранней версии. http://developer.android.com/google/gcm/gcm.html.

Вам также следует добавить <uses-permission android:name="android.permission.GET_ACCOUNTS" /> в свой файл манифеста.

1
ztan 3 Ноя 2014 в 21:00

Это просто означает, что вы даете неправильный регистрационный идентификатор. Поэтому для этого сначала запустите мобильное приложение, и ваш регистрационный идентификатор станет токеном. Поместите этот токен в код сервера приложений в качестве идентификатора регистрации. В качестве идентификатора приложения укажите идентификатор сервера, который вы можете получить из консоли разработчика Google, вашего проекта и учетных данных. Для идентификатора отправителя укажите идентификатор проекта, который может быть получен из настроек проекта в консоли разработчика.

1
ireshika piyumalie 24 Сен 2016 в 23:38
Я использую GCM через Интернет и недавно начал получать это же сообщение при отправке некоторых уведомлений (не всех). Где этот регистрационный идентификатор, о котором говорят люди? Я получаю это сообщение: {"multicast_id":63135.....,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}] и весь мой файл манифеста выглядит следующим образом: {"gcm_sender_id": "10395...." }
 – 
kneidels
10 Мар 2019 в 14:33