it-swarm.com.ru

Android поддерживает Push-уведомления в режиме реального времени?

Недавно я узнал о способности приложений iPhone получать почти мгновенно уведомления для приложений уведомления для приложений .

Это обеспечивается в форме Push-уведомлений, специального протокола, который поддерживает постоянное подключение к данным на iPhone и передает двоичные пакеты приложению, который выдает предупреждения невероятно быстро, в течение 0,5 - 5 секунд. из приложения сервера отправьте на телефон время ответа приложения. Это отправляется как данные, а не SMS - в очень очень маленьких пакетах, оплачиваемых как часть плана данных, а не как входящие сообщения.

Я хотел бы знать, есть ли в Android аналогичное средство или возможно ли реализовать что-то похожее на это с помощью Android API. Чтобы уточнить, я определяю подобное как:

  • Не SMS сообщение, а какое-то решение, управляемое данными
  • В режиме реального времени, насколько это возможно
  • Является масштабируемой, то есть как серверная часть мобильного приложения, я мог бы уведомить тысячи экземпляров приложения в считанные секунды

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

330
j pimmel

Firebase Cloud Messaging FAQ по FCM - это новая версия GCM. Он наследует основную инфраструктуру GCM для надежной доставки сообщений на Android, iOS и Chrome. Однако они продолжат поддерживать GCM, потому что многие разработчики используют GCM SDK сегодня для обработки уведомлений, а обновление клиентских приложений требует времени.

По состоянию на 26 июня 2012 г. Google Cloud Messaging является предпочтительным способом отправки сообщений в приложения, работающие на устройствах.

Ранее (а теперь и устарело) эта служба называлась Обмен сообщениями с облака на устройство .

211
j pimmel

XMPP это хорошее решение. Я использовал его для приложения, работающего в режиме реального времени, Android. XMPP является мощным, легко расширяемым и простым в интеграции и использовании.

Существует множество бесплатных серверов XMPP (хотя из вежливости вы не должны ими злоупотреблять) и есть серверы с открытым исходным кодом, которые вы можете запускать на одном из ваших собственных серверов. OpenFire отличный выбор.

Библиотека, которую вы хотите, - это не Smack , как отмечено выше, это aSmack . Но обратите внимание, это среда сборки - вам придется собирать библиотеку.

Вот расчет, который я сделал для влияния времени работы от батарей решения XMPP:

Клиент Android должен поддерживать постоянное соединение TCP путем периодического пробуждения для отправки пульса на сервер XMPP.
Это явно налагает затраты с точки зрения использования энергии. Оценка этой стоимости приведена ниже:

  • Использование аккумулятора емкостью 1400 мАч (поставляется в комплекте с Nexus One и HTC Desire)
  • Свободное устройство, подключенное к сети 3G, использует приблизительно 5 мА
  • Цикл пробуждения, сердцебиения, сна происходит каждые 5 минут, занимает три секунды и использует 300 мА
  • Следовательно, стоимость использования батареи в час:
    • 36 секунд 300 мА = 3 мАч отправка сердцебиения
    • 3600 секунд 5 мА = 5 мАч на холостом ходу
    • 4:95 + 3 = 7: 95 мАч в сочетании
  • Батарея емкостью 1400 мАч работает в режиме ожидания примерно 11,6 дня, а при работе приложения - 7,3 дня, что примерно на 37% сокращает срок службы батареи.
  • Тем не менее, сокращение срока службы батареи на 37% представляет собой наихудший случай на практике, учитывая, что устройства редко полностью простаивают.
46
flesh

Недавно я начал играть с MQTT http://mqtt.org для Android как способ сделать то, что вы просите (т.е. не SMS, но управление данными, почти немедленная доставка сообщений, масштабируемость, не опрос и т. д.)

У меня есть сообщение в блоге с дополнительной информацией об этом на случай, если это будет полезно http://dalelane.co.uk/blog/?p=938

(Примечание: MQTT - это технология IBM, и я должен отметить, что я работаю на IBM.)

32
dalelane

Посмотрите на платформу Xtify . Похоже, это то, что они делают,

13
peter

Google обесценивает C2DM, но вместо него они представляют GCM (Google Cloud Messaging). Я не думаю, что у них есть какая-либо квота и она бесплатна! Это требует Android 2.2+! http://developer.Android.com/guide/google/gcm/index.html

12
William L.

Существует новая попытка с открытым исходным кодом разработать библиотеку Java для push-уведомлений на Android с использованием комет-сервера Meteor в качестве бэкэнда. Вы можете проверить это в Блог Проекта Дьякона . Нам нужны разработчики, поэтому, пожалуйста, распространяйте Слово!

8
mtbkrdave

Если вы можете зависеть от наличия библиотек Google для своего целевого рынка, то вы можете добавить функциональность GTalk (зарегистрировать ресурс на существующем имя пользователя - перехватывает сообщения, когда они приходят с BroadcastReceiver).

Если нет, и я ожидаю вы не можете , то вы собираете свои собственные версии XMPP . Это неприятно, но может быть облегчено, если XMPP поставляется отдельно как отдельная библиотека.

Вы также можете рассмотреть PubSubHubub , но я понятия не имею о его использовании в сети. Я считаю, что он построен поверх XMPP.

8
jamesh

Я смотрел на это, и PubSubHubBub, рекомендованный Jamesh, не вариант. PubSubHubBub предназначен для обмена данными между серверами.

"Я за NAT. Могу ли я подписаться на концентратор? Концентратор не может подключиться ко мне".

/ Anonymous

Нет, PSHB - это межсерверный протокол. Если вы находитесь за NAT, вы на самом деле не сервер. Несмотря на то, что мы выдвинули идеи о дополнительных расширениях PSHB для выполнения зависаний ("длинный опрос") и/или опроса сообщений для таких клиентов, это не входит в базовую спецификацию. Основная спецификация - только сервер-сервер.

/ Брэд Фицпатрик, Сан-Франциско, Калифорния

Источник: http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (прямая ссылка невозможна)

Я пришел к выводу, что самым простым методом является использование Comet HTTP Push. Это простое и понятное решение, но его также можно использовать для веб-приложений.

8
Morgan Christiansson

Недавно я разработал http://pushdroid.org это отдельное приложение, которое должно быть установлено на телефоне так же, как Google реализовал его в 2.2, это работает с 1.5 и транслируется через намерение.

6
Stefan

Я не могу найти, где я читаю это, но я полагаю, что gmail использует открытое TCP соединение, чтобы сделать электронную почту Push.

6
Will

Google недавно (18 мая 2016 г.) объявлено that Firebase теперь является единой платформой для разработчиков мобильных приложений, в том числе push-уведомлений практически в реальном времени. Это также мультиплатформенная система:

Теперь компания предлагает всем пользователям Firebase бесплатные и неограниченные уведомления с поддержкой iOS, Android и ​​Интернета.

источник

6
Freek Nortier

Почему бы вам не пойти с реализацией XMPP. прямо сейчас доступно так много общедоступных серверов, включая gtalk, Jabber, цитадель и т. д. Для Android также доступен один SDK с именем SMACK. Мы не можем сказать Push-уведомление, но используя XMPP, вы можете оставить соединение между клиентом и сервером открытым, что позволит осуществлять двустороннюю связь. Средства Android и ​​клиент, и сервер могут взаимодействовать друг с другом. В настоящее время это удовлетворит потребность Push в Android. Я реализовал пример кода, и он действительно отлично работает

6
Rahul Patel

Поскольку GTalk отсутствует в SDK, было бы неплохо создать "стандартную" систему push-сообщений. Таким образом, должна работать только одна служба, только одно дополнительное TCP-соединение должно быть открыто. Приложения должны общаться с этой службой, используя Intents, и сначала должны запросить разрешение на отправку и получение уведомления от службы. Затем служба должна уведомить пользователя о том, что новое приложение хочет отправлять и получать сообщения. Затем пользователь предоставит или отклонит разрешение, поэтому он остается под контролем. Затем приложение зарегистрирует в сервисе категорию action +, чтобы служба знала, как доставить отправленное сообщение.

Будет хорошая идея или нет?

6
MrSnowflake

Проблема с GCM заключается в том, что в процесс вовлечено много настроек:

  • Вы должны добавить множество шаблонов к своему приложению Android
  • Вам необходимо настроить внешний сервер для связи с сервером GCM
  • Вам придется писать тесты

Если вам нравятся простые вещи (как я), вы должны попробовать rbanAirship . Это (ИМХО) самый простой способ использовать GCM в вашем приложении без особых настроек. Это также дает вам симпатичный графический интерфейс для проверки правильности доставки ваших сообщений GCM.

  • Вы можете найти документы и руководство по началу работы здесь
  • Вы можете найти образец приложения здесь

Примечание: я никак не связан с UrbanAirship

4
fernandohur

https://github.com/Guti/Google-Cloud-Messaging--Titanium-/blob/master/src/com/google/Android/gcm/GCMRegistrar.Java

Это действительно хорошее и рабочее решение для Push.

Пожалуйста, попробуйте

2
Pooja Roy

У них есть свои слушатели, которые вы должны использовать, используя их библиотечные классы в вашем коде. Вам не нужно беспокоиться о толкании. Вы должны отправить сообщение на сервер. Сервер отправит сообщение на устройство. Они используют OAuth. Что касается протоколов, есть два метода, использующих CCS и XMPP. CCS просто использует XMPP в качестве аутентифицированного транспортного уровня, поэтому вы можете использовать большинство библиотек XMPP для управления соединением. Чтобы отправлять уведомления на устройство, вы можете написать код в приложении Android и ​​код вашего сервера. отправка сообщения будет осуществляться только вашим кодом. В случае GCM сервер Google позаботится об остальном. Вы можете проверить детали по этой ссылке

http://developer.Android.com/google/gcm/server.html

Также по вопросам безопасности

безопасность обмена сообщениями в облаке Google https://groups.google.com/forum/#!topic/Android-gcm/M-EevBitbhQ

Если ваше приложение не запущено, устройства также могут получать уведомления, потому что вы должны написать код для слушателей вещания. В фоновом режиме он будет прослушивать сервер и всякий раз, когда будет присутствовать какой-либо пакет сообщения, он будет получать сообщение как уведомление. Android есть сервис, который вам нужен, чтобы не беспокоиться об этом. Вам нужно только использовать эти ресурсы, используя класс библиотеки, который облегчает вашу работу и позволяет им писать, если ваше приложение не запущено, а также оно получает уведомление. Очевидно, что будет какой-то слушатель, который сделает приложение для получения. Проверьте раздел "Получить сообщение" в этой ссылке

http://developer.Android.com/google/gcm/client.html

Он также будет принимать запросы от пользователей. Для GCM это подойдет. Пожалуйста, отметьте "Отправить сообщение"

http://developer.Android.com/google/gcm/client.html

2
ajitksharma