it-swarm.com.ru

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

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

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

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

39
LKM

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

51
Samik

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

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

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

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

{"error": "NotRegistered"} 

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

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

5
naren

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

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

<application>
...
<receiver>
...
</receiver>
...
</application>
2
G O'Rilla

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

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

1
ztan

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

0
ireshika piyumalie