Intereting Posts
Как установить ADB-протокол USB между двумя устройствами Linux Ошибка android.support.v8.rendscript на ProGuard RequestFeature () необходимо вызвать перед добавлением ошибки содержимого на super.onCreate BroadcastReceiver для отсоединения наушников Активность Переходы не работают Получение файла каталога и ClassLoader для игры в стиле libGDX Невозможно использовать Fragment.setRetainInstance () в качестве замены для Activity.onRetainNonConfigurationInstance () Как изменить текст вкладки Android на лету? Как создать пакет андроидной версии релиза (aar) в Android Studio (не отлаживать) Как установить тайм-аут HttpResponse для Android в Java Обновление Android-фильтра Sqlite singleton db не удалось Отправлять трансляцию с Сервиса на активность? Обработка ошибок при синхронном вызове с помощью «Дооснащения» Производительность разумная, что обычно лучше, используя образ или созданную xml-форму в качестве переносимого? Как проверить, расширяется или сгруппирована группа в Android ExpandableListView?

Виртуальные сообщения Google – GCM – SERVICE_NOT_AVAILABLE

Я пытаюсь, чтобы внедрить новый GCM, я следую за Google: http://developer.android.com/guide/google/gcm/gs.html

Я застреваю в получении идентификатора регистрации устройства!

Мое приложение продолжает пытаться подключиться к серверу Google. Здесь мои журналы ошибок:

onReceive: com.google.android.gcm.intent.RETRY GCM IntentService class: com.dombox.app.GCMIntentService Acquiring wakelock [GCMIntentService] start Registering app com.dombox.app of senders _my_sender_id_ Releasing wakelock onReceive: com.google.android.c2dm.intent.REGISTRATION GCM IntentService class: com.dombox.app.GCMIntentService Acquiring wakelock [GCMIntentService] start handleRegistration: registrationId = null, error = SERVICE_NOT_AVAILABLE, unregistered = null Registration error: SERVICE_NOT_AVAILABLE Scheduling registration retry, backoff = 912617 (768000) Releasing wakelock 

Вот мой код активности, запрашивающий идентификатор:

  try{ Log.i(TAG, "[checkNotifRegistration] checkDevice"); GCMRegistrar.checkDevice(this); Log.i(TAG, "[checkNotifRegistration] checkManifest"); GCMRegistrar.checkManifest(this); if (GCMRegistrar.isRegistered(this)) { Log.i(TAG, "[checkNotifRegistration] reg id : "+GCMRegistrar.getRegistrationId(this)); } final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { // SENDER_ID is my project id into google account url GCMRegistrar.register(this, SENDER_ID); Log.i(TAG, "[checkNotifRegistration] reg id : "+GCMRegistrar.getRegistrationId(this)); } else { Log.i(TAG, "[checkNotifRegistration] already registered as : " + regId); } } catch(Exception e){ Log.e(TAG, "[checkNotifRegistration] Exception : "+e.getMessage()); e.printStackTrace(); } 

Здесь мой код службы

 public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; public GCMIntentService() { super(SENDER_ID); // SENDER_ID is my project id into google account url // TODO Auto-generated constructor stub Log.d(TAG, "[GCMIntentService] start"); } public GCMIntentService(String senderId) { super(senderId); // TODO Auto-generated constructor stub Log.d(TAG, "[GCMIntentService] start - sender Id : "+senderId); } } 

И вот мой манифест Android:

 <permission android:name="com.dombox.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.dombox.app.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:icon="@drawable/icon" android:label="@string/app_name" > <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="com.myapp.app" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" android:enabled="true"/> <activity android:name=".activity.Myapp" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Я следую инструкции Google, но я придерживался этой ошибки SERVICE_NOT_AVAILABLE,

Что я делаю не так ?

Solutions Collecting From Web of "Виртуальные сообщения Google – GCM – SERVICE_NOT_AVAILABLE"

Проблема не связана с кодом, а связана с тестовым телефоном. На тестовом телефоне нет SIM-карты, и часы не установлены . Таким образом, Google не может повторно отправить его с неправильным временем.

У меня есть идентификатор регистрации с использованием виртуального устройства Android с помощью google api, а также установка тестовых телефонных часов .

 android:enabled="true" 

Удалить это ^

Если вы еще не добавили это в свой манифест

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" 

Вам не нужен второй конструктор в GCMIntentService. Только этот

 public GCMIntentService() { super(SENDER_ID); } 

Убедитесь, что ваш SENDER_ID – это число, скопированное из URL-адреса вашего браузера во время просмотра веб-сайта google-кода и просмотра службы GCM.

Помните, что если вы находитесь за корпоративным брандмауэром, некоторые порты, которые использует GCM, не могут быть разрешены для связи по локальной беспроводной сети. У меня была эта проблема, когда я пытался заставить свой эмулятор работать на начальном этапе. Мне пришлось получить специальный IP-адрес, который разрешил перечисленные ниже порты.


Примечание. Если в вашей организации есть межсетевой экран, который ограничивает трафик в Интернете или из Интернета, вам необходимо настроить его, чтобы разрешить подключение к GCM, чтобы ваши устройства Android получали сообщения. Открытые порты: 5228, 5229 и 5230. GCM обычно использует только 5228, но иногда использует 5229 и 5230. GCM не предоставляет определенные IP-адреса, поэтому вы должны разрешить вашему брандмауэру принимать исходящие подключения ко всем IP-адресам, содержащимся В блоках IP, перечисленных в ASN от 15169.

http://developer.android.com/google/gcm/gcm.html

У меня была эта проблема … моим решением было отключить подключение к Интернету и использовать телефонную службу.

У меня была эта проблема, и это было вызвано соединением WIFI. Я выключил WIFI и снова провел тест (на 3g), и он работал. Затем я снова включил WIFI и снова получил ошибку. Вернитесь к 3g, чтобы убедиться, и он снова работал.

Итак, в заключение, проблема была вызвана связью.

У меня была проблема с запуском моего приложения в режиме genymotion. Установка игровых сервисов Google, как это сказано здесь, и все работает нормально.