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

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

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

41
LKM 3 Ноя 2014 в 19:05

8 ответов

Лучший ответ

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

54
Hakan Fıstık 2 Мар 2018 в 15:07

Если вы используете устройство для тестирования, вам необходимо удалить 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 18 Дек 2016 в 22:11

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 в 18:51

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

{"error": "NotRegistered"} 

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

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

5
halfer 18 Дек 2016 в 21:45

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

<application>
...
<receiver>
...
</receiver>
...
</application>
2
G O'Rilla 7 Окт 2015 в 15: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 9 Мар 2016 в 23: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 в 18:00

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

1
ireshika piyumalie 24 Сен 2016 в 20:38