Мне удалось протестировать свой код GCM.
Но точно такой же код, я не смог получить толчок GCM и получил:
Ошибка GCM: не зарегистрировано.
8 ответов
Ответ GCM Not Registered
означает следующее: "Если это NotRegistered
, вам следует удалить регистрационный идентификатор из базы данных вашего сервера, потому что приложение было удалено с устройства или у него нет широковещательного приемника, настроенного для приема 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, я бы предложил следующие шаги:
- Удалите текущую установку с устройства 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" />
в свой файл манифеста.
Это просто означает, что вы даете неправильный регистрационный идентификатор. Поэтому для этого сначала запустите мобильное приложение, и ваш регистрационный идентификатор станет токеном. Поместите этот токен в код сервера приложений в качестве идентификатора регистрации. В качестве идентификатора приложения укажите идентификатор сервера, который вы можете получить из консоли разработчика Google, вашего проекта и учетных данных. Для идентификатора отправителя укажите идентификатор проекта, который может быть получен из настроек проекта в консоли разработчика.
{"multicast_id":63135.....,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}]
и весь мой файл манифеста выглядит следующим образом: {"gcm_sender_id": "10395...." }
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.