Мне удалось проверить мой код GCM.
Но точно такой же код, я не мог получить GCM push и получил:
Ошибка GCM: не зарегистрировано.
Мне удалось проверить мой код GCM.
Но точно такой же код, я не мог получить GCM push и получил:
Ошибка GCM: не зарегистрировано.
@LKM Ответ GCM "Не зарегистрирован" означает следующее "Если он не зарегистрирован, вы должны удалить идентификатор регистрации из своей базы данных сервера, потому что приложение было удалено с устройства или у него нет широковещательного приемника, настроенного для приема 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 я бы предложил следующие шаги:
<receiver>
и <sender>
определены в <application>
node в AndroidManifest.xml
.<category android:name="COM.COMPANY.YOURAPP" />
в <receiver>
Если вы действительно думаете, что ваш код верен и по-прежнему появляется ошибка
{"error": "NotRegistered"}
попробуйте удалить приложение вручную с телефона и запустите его снова (ваше устройство получит новый идентификатор регистрации).
По крайней мере, в моем случае проблема была решена!
У меня была эта ошибка, когда у меня был gcm-приемник вне приложения в файле манифеста. Переместил ресивер в область приложения, и все сработало. Теперь очень счастливый кролик.
<application>
...
<receiver>
...
</receiver>
...
</application>
Аккаунт Google является обязательным требованием для устройств под управлением Android 4.0.4 или ниже. http://developer.android.com/google/gcm/gcm.html
Вы также должны добавить <uses-permission android:name="android.permission.GET_ACCOUNTS" />
в файл манифеста.
Я использовал старый устаревший код для 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, вашего проекта и учетных данных. Для Идентификатора отправителя укажите идентификатор проекта, который можно получить из проекта, настройки в консоли разработчика.