Идентификатор регистрации приложения не генерируется в GCM Android

Я пробовал некоторые страницы форума и искал через stackoverflow для одного и того же, но я не нашел решение.

Я использовал приведенный ниже код для создания идентификатора регистрации для уведомления GCM. Но я получаю пустую строку в качестве идентификатора регистрации:

GCMRegistrar.checkDevice (это); GCMRegistrar.checkManifest (это);

If (GCMRegistrar.isRegistered (this)) {Log.d ("info", GCMRegistrar.getRegistrationId (this)); }

regId = GCMRegistrar.getRegistrationId(this); Log.v("log", " register id oslo : " + regId); if (regId.equals("")) { // replace this with the project ID GCMRegistrar.register(this, "718437041388"); Log.d("info", GCMRegistrar.getRegistrationId(this)); } else { Log.d("info", "already registered as" + regId); } 

Пожалуйста, помогите мне в этом, скажите мне, есть ли у меня что-то не так.

Заранее спасибо, Нирав.

Вы не должны получать регистрацию сразу после GCMRegistrar.register(this, "718437041388");
На самом деле, у вас есть правильный GCMIntentService.java который получает regId?
Если да, вы можете получить regid из onRegistered внутри GCMIntentService.java

  @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "Device registered: regId = " + registrationId); Log.d("GCMIntentService", "in GCMIntentService"); displayMessage(context, getString(R.string.gcm_registered)); ServerUtilities.register(context, registrationId); } 

Заметить, что

  GCMRegistrar.register(this, "..."); 

Является асинхронным. Поэтому вызов GCMRegistrar.getRegistrationId(this) сразу же после этого не является надежным, поэтому вам следует его избегать.

Идентификатор будет поступать через функцию обратного вызова в GCMIntentService в качестве части процедуры регистрации. Оттуда вы можете хранить ключ gcm в любом месте, где хотите, и использовать его в других частях приложения (обычно на сервере).

Обратите внимание, что GCMIntentService должен быть определен в корневом пакете вашего приложения, чтобы он работал.

Попробуйте использовать эмулятор с Google API, а также синхронизируйтесь с учетной записью Google.

У меня такая же проблема после 1 дня борьбы я нахожу решение. Сначала поставьте свой код GCM в мой основной пакет и внесите изменения в соответствии с My Package в androidManifest.xml

Я даю вам простой пример. Название моего проекта – GCMExample, и у меня есть три пакета 1. com.examle.GCMExample (Основной пакет), 2. com.examle.GCMExample.activity (Второй пакет), 3. com.example.GCMExample.adapter (Третий пакет)

Я не получаю регистрационный идентификатор, когда мой файл связанного класса GCM в мой второй пакет

Мой GCM Связанный класс, например 1. GCMIntentService, 2. ServerUtilities, 3. CommonUtilities 4. WakeLocker помещается в мой основной пакет com.example.GCMExample

Также мой 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" /> 

Добавьте файл баннера GCM в папку вашего проекта