Intereting Posts
Как установить TimeZone в android OnCreateOptionsMenu не будет вызван на FragmentActivity при запуске по версии телефона Превращение строки в Uri … (Android) Как реализовать эффекты искажения изображения в Android Android Studio, как сделать 2 столбца LinearLayout Как получить номер версии приложения в Android? Как перенести существующее приложение SQLite в библиотеку пространственного сопротивления? Логарифмическая печать «имя интерфейса: null» во время вызова метода выполнения DefaultHttpClient Как поддерживать состояние индикатора выполнения при использовании залпа? MediaPlayer: остановить вызов в состоянии 4 Android: howto parse URL String с пробелами для URI-объекта? Запуск активности из ярлыка всегда запускает основную деятельность Android: захват видео на устройстве или эмуляторе Андроидный фрагмент OnCreateView дважды называется При использовании Mono Touch я могу также пакет для стандартного приложения Window?

GCM: как избежать дросселирования

Моя система Android должна отправлять частые обновления в приложение для планшета (киоск, всегда подключенный к Wi-Fi и сетевой вилке).
GCM-HTTP (//developer.android.com/google/gcm/http.html) работает нормально, но в некоторых случаях может случиться так, что одно устройство получает много уведомлений, вызывающих известную проблему дросселирования, описанную здесь (// разработчик. android.com/google/gcm/adv.html#throttling). Это проблема, поскольку полезная нагрузка в уведомлении имеет большое значение для системы. Какое лучшее решение для предотвращения этого?

  • Внедрить на сервере службу, которая группирует уведомления на одно и то же устройство и снимает их с ограниченной частотой.
  • Используйте службу XMPP. Я хотел бы использовать GCM-XMPP (//developer.android.com/google/gcm/ccs.html), но вы должны быть подписаны в белом списке, поэтому я не думаю, что все уже могут его использовать. В качестве альтернативы я должен использовать aSmack или Quickblox в соответствии с рекомендациями здесь ( Android и XMPP: доступные в настоящее время решения ) и здесь ( лучший способ реализовать приложение чата с помощью XMPP на Android? ) Соответственно?
  • Реализовать базовое соединение сокета, как описано в (//thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/)? В этом случае я должен учитывать возможность мгновенного утери связи?

РЕШЕНИЕ: Я нашел решение своего вопроса, это протокол XMPP. Сначала я реализовал aSmack в приложении планшета и настроил сервер eJabberd, работающий локально. Реализация была довольно простой. Через пару недель я получил почту от Google для GCM-XMPP, которая еще быстрее внедряется в приложение и прекрасно работает!

Возможно, установите time_to_live равным 0.

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

«Еще одно преимущество указания даты истечения срока действия сообщения заключается в том, что GCM никогда не будет дросселировать сообщения с использованием значения time_to_live в 0 секунд . Другими словами, GCM гарантирует наилучшие усилия для сообщений, которые должны быть доставлены« сейчас или никогда ». Имейте в виду Что значение time_to_live 0 означает, что сообщения, которые не могут быть доставлены немедленно, будут отброшены. Однако, поскольку такие сообщения никогда не сохраняются, это обеспечивает наилучшую задержку отправки уведомлений ».