Я не могу получить регистрационный идентификатор из Android GCM
-
13-12-2019 - |
Вопрос
Хотя я пытаюсь найти другой ответ на эту проблему, ее невозможно решить.Идентификатор отправителя верен, разрешения добавлены, ключ API верен.
Я использую этот пост для создания проекта:http://developer.android.com/guide/google/gcm/gs.html#server-app
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
regId = GCMRegistrar.getRegistrationId(this);
} else {
Log.v(TAG, "Already registered");
}
String did = getDeviceID();
он возвращает пустую строку.
Решение
У вас есть GCMIntentService
определенный правильно в корневом пакете вашего приложения?
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="my_app_package" />
</intent-filter>
</receiver>
Убедись в том, что "my_app_package"
идентичен основному пакету вашего приложения, иначе ваш идентификатор вернет пустую строку.
Также обратите внимание, что
GCMRegistrar.register(this, "...");
является асинхронным.Поэтому вызов GCMRegistrar.getRegistrationId(this)
сразу после этого ненадежно, поэтому вам следует избегать этого.
Идентификатор придет через широковещательный обратный вызов на ваш GCMIntentService
, как часть процедуры регистрации.оттуда вы можете сохранить ключ gcm/fcm где угодно и использовать его в других частях приложения (обычно на сервере).
Другие советы
Если ваше приложение запускает первый раз, вы должны дождаться оверированного обратного вызова на вашем файле gcmintentservice.java.
GCMRegistrar.register(this, SENDER_ID);
// Android does NOT wait for registration ends and executes immediately line below
// So your regId will be empty.
regId = GCMRegistrar.getRegistrationId(this);
.
gcmintentservice.java:
@Override
protected void onRegistered(Context c, String regId) {
// You can get it here!
}
.
У меня такая же проблема после 1-дневной борьбы, которую я нахожу решение.Сначала я поставил свой код, связанный с GCM в мою главную упаковку и внесите изменения в соответствии с моим пакетом в androidmanifest.xml
Я даю вам простой пример.Мое имя проекта - GCMexample, и у меня есть три пакета 1. com.examle.gcmexample (основной пакет), 2. Com.examle.gcmexample.Activity (второй пакет), 3. com.example.gcmexample.Adapter (третий пакет)/ P >.
Я не получаю идентификатор регистрации, когда мой класс класса GCM на мой второй пакет
Мой класс, связанный с GCM, как 1. GCMIntentservice, 2. ServeruTilities, 3. Усилимость 4. WakeLocker введен в мой основной пакет COM.example.gmexample
также мой androidmanifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<permission android:name="com.example.GCMExample.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.GCMExample.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- Receives the registration id. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.example.GCMExample" />
</intent-filter>
</receiver>
<service android:name="com.example.GCMExample.GCMIntentService" />
. Регистрация приложения com.example.ilkgcm отправителей "my_sender_id" - эта ошибка предполагает, что вы не изменили свой «my_sender_id» в действительный идентификатор отправителя, который был бы 12-буквенным кодом.
Если вы не получаете ответы от регистрации. Одна из основной причины - это ваш файл манифеста не настроен правильно ... Особенно дайте «Package_Name» (ваше имя пакета приложения, такое как COM.xxx.yyy) в иправильно.
Например, имя класса вашего получателя: «MyCustomintentservice.java», просто измените это имя как «GCMIntentservice.java», затем попробуйте снова.Это простое решение.Просто измените имя файла в области SRC.