Я не могу получить регистрационный идентификатор из Android GCM

StackOverflow https://stackoverflow.com//questions/11713363

  •  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!
}
.

Редактировать : новая версия библиотеки GCM (которая в комплекте с библиотекой Google Play Services) ждет ответа и возвращает идентификатор регистрации.Таким образом, этот ответ предназначен для более старых библиотек GCM.

У меня такая же проблема после 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top