Intereting Posts
Как конкатенировать несколько строк в XML-андроиде? Календарь Android Календарь всех дней праздника отключается на один день по GMT + x Области Как использовать InputType = numberDecimal с помощью «телефонной» мягкой клавиатуры? Android: Как определить ориентацию изображения (портрет или пейзаж), выбранный из галереи при настройке изображения? ActivityUnitTestCase getActionBar () возвращает null Ошибка при получении проблемы с трансляцией Как андроид устанавливает пользовательский шрифт в холсте? Пользовательский макет панели действий с меню переполнения Android: как использовать Wi-Fi-сеть для определенных хостов, но использовать телефон. Мобильная сеть для всего остального. В чем смысл этой иконки Eclipse? Как вы повторяете изображение только вертикально в Android? Откройте страницу Google Plus с помощью намерения в Android Ошибка: ANDROID_HOME не установлен, а команда «android» не находится в вашем PATH. Вы должны выполнить хотя бы одно из этих условий Как воспроизводить несколько видеофайлов одновременно в одном макете бок о бок в разных форматах на Android Android SQLite SQLiteOpenHelper IllegalStateException – DB уже закрыта ошибка

Устройство перестает принимать GCM, пока сеть не переключится

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

Каждый раз, когда устройство перестало работать, я проверил, что у устройства есть действительный regId из GCM, и мой сервер отправляет push на этот regId. Однако журналы показывают, что устройство ничего не получает. Вот что выглядит журнал с обычным нажатием:

05-15 10:39:21.091: V/GCMBroadcastReceiver(13766): onReceive: com.google.android.c2dm.intent.RECEIVE 05-15 10:39:21.091: V/GCMBroadcastReceiver(13766): GCM IntentService class: com.medigram.v2.GCMIntentService 05-15 10:39:21.091: V/GCMBaseIntentService(13766): Acquiring wakelock 05-15 10:39:21.111: V/GCMBaseIntentService(13766): Intent service name: GCMIntentService-468134393228-13 05-15 10:39:21.131: V/GCMBaseIntentService(13766): Releasing wakelock 05-15 10:39:21.171: V/GCMBroadcastReceiver(13766): onReceive: com.google.android.c2dm.intent.RECEIVE 05-15 10:39:21.171: V/GCMBroadcastReceiver(13766): GCM IntentService class: com.medigram.v2.GCMIntentService 05-15 10:39:21.171: V/GCMBaseIntentService(13766): Acquiring wakelock 05-15 10:39:21.241: V/GCMBaseIntentService(13766): Intent service name: GCMIntentService-468134393228-14 05-15 10:39:21.271: V/GCMBaseIntentService(13766): Releasing wakelock 

Ничто из этого не появляется на устройствах, которые перестали получать нажатие, и в результате не вызван метод onMessage () моего вызова GCMIntentService.

Странная вещь, когда я переключаю соединение устройства с 3G / 4G на Wi-Fi или наоборот, он снова начинает работать, и устройство получает все отсталые нажатия одновременно. Что именно происходит при изменении типа подключения?

В случае, если это помогает, вот некоторые вещи, которые я пробовал на устройствах, где push работает, чтобы вручную воспроизвести проблему, но безрезультатно:

-Я сначала подумал, что это может быть проблема контекста, но это быстро исключалось, когда просто переключались сети, разрешавшие проблему. В любом случае я попытался продолжить исследование, используя опцию разработчика «Не задерживать деятельность», а затем опираясь на приложение, но это не повлияло на push.

-Я пробовал принудительно остановить приложение, чтобы посмотреть, не приведет ли он к остановке работы, но проблема, похоже, не имеет ничего общего с тем, что приложение перестало работать, поскольку оно продолжает работать.

-Я пробовал поместить телефон в режим самолета и вернуться, но толчок продолжал работать.

Я был бы очень признателен, если бы кто-нибудь мог указать мне в правильном направлении, так как я довольно сильно исчерпал все ресурсы в stackoverflow и google. Я все еще так же не знаю, как это произошло, когда я начал.

Solutions Collecting From Web of "Устройство перестает принимать GCM, пока сеть не переключится"

Обычно Android отправляет мгновенное сообщение каждые 28 минут на мобильном телефоне и каждые 15 минут на Wi-Fi, поэтому вы можете исправить это, передав эти два намерения за короткий промежуток времени от своего приложения.

com.google.android.intent.action.MCS_HEARTBEAT

com.google.android.intent.action.GTALK_HEARTBEAT

  Intent intent = new Intent("com.google.android.intent.action.MCS_HEARTBEAT"); Intent intent1 = new Intent("com.google.android.intent.action.GTALK_HEARTBEAT"); sendBroadcast(intent); sendBroadcast(intent1); 

Вы можете подробно прочитать здесь