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

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

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

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

Solutions Collecting From Web of "Ошибка GCM: не зарегистрировано"

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

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

InstanceID instanceID = InstanceID.getInstance(this); try { instanceID.deleteInstanceID(); } catch(IOException e) { e.printStackTrace(); } instanceID = InstanceID.getInstance(this); 

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

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

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

  1. Удалите текущую установку с Android-устройства
  2. Удостоверьтесь, что <receiver> и <sender> определены в узле <application> в AndroidManifest.xml .
  3. Убедитесь, что у вас есть правильный <category android:name="COM.COMPANY.YOURAPP" /> в вашем <receiver>
  4. Убедитесь, что реализация Receiver правильная

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

 {"error": "NotRegistered"} 

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

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

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

 <application> ... <receiver> ... </receiver> ... </application> 

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

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

Я использовал старый устаревший код для 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 )

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

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