Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

{"error": "NotRegistered"} 

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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