Intereting Posts
Android: Есть ли способ имитировать события D-Pad (API 10)? Visual Studio не может отлаживать приложение Android Xamarin Рисовать векторный круг MapBox / Leaflet Android Фоновая привязка: исправлено не работает на android / mobile Неверная транзакция связывания при динамическом размещении растрового изображения в виджетах Как включить WebKitDeveloperExtras в Android-приложении Android Идентификатор регистрации приложения не генерируется в GCM Android Диалоговое окно Google Smart Lock для сохранения учетных данных не отображается при тестировании Есть ли способ проверить, отладка или публикация подписи приложения? Существуют ли совместимые с Android альтернативы Property Utils? PercentRelativeLayout, как установить высоту программно Принудительная повторная компоновка в группе просмотра, включая всех ее детей Как удалить неиспользуемые значки Google+ из библиотеки Google Play Services Android эмулятор висит при запуске? Текст редактора Xamarin Forms не отображается корректно на android

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 означает, что сообщения, которые не могут быть доставлены немедленно, будут отброшены. Однако, поскольку такие сообщения никогда не сохраняются, это обеспечивает наилучшую задержку отправки уведомлений ».