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

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

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

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

8 ответов


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


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

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

на 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 является правильным

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

{"error": "NotRegistered"} 

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

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


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

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

я использовал старый устаревший код для 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 является требованием на устройствах под управлением Android 4.0.4 или ниже. http://developer.android.com/google/gcm/gcm.html

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


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