Ошибка 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 думает, что устройство не может обработать сообщение. Это происходит, если приложение удалено или неправильно настроено для обработки сообщения:
на основе ответов @Samik и @O'Rilla я бы предложил следующие шаги:
- удалить текущую установку с устройства Android
- убедитесь, что у вас есть
<receiver>
и<sender>
определена в<application>
узелAndroidManifest.xml
. - убедитесь, что у вас есть правильное
<category android:name="COM.COMPANY.YOURAPP" />
в своем<receiver>
- убедитесь, что реализация 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, ваш проект и учетные данные. Для идентификатора отправителя установите идентификатор проекта, который может быть получен из проекта, настройки в консоли разработчика.