Android-устройство должно быть подключено к серверу - C2DM, опрос или что-то третье? - PullRequest
1 голос
/ 04 ноября 2011

В настоящее время я нахожусь в процессе разработки приложения, у которого есть очень требовательные потребности.

Проект

Требуется приложение, которое может взаимодействовать с сервером. Небольшие сообщения должны быть отправлены в приложение, которое может отображать уведомление или начать деятельность.

Требования

Клиент должен быть уверен, что телефон всегда «подключен».
Клиент ожидает, что приложение может определить, когда оно больше не подключено (или не может подключиться) к серверу, о котором оно сообщает пользователю.

Клиент должен иметь возможность отправлять сообщения на отдельные устройства
Если клиенту необходимо передать сообщение подключенным устройствам и отдельным устройствам.

Мои мысли (или проблемы)

В настоящее время приложение опрашивает сервер с помощью http-запроса раз в минуту - если приложение не может подключиться к серверу, пользователь получает уведомление. Опрос может определить, какое устройство вызывает, и сообщить, есть ли для него сообщение.

Но ...

IMO, это ужасный дизайн - он генерирует много избыточного трафика, использует ресурсы, которые, вероятно, не были необходимы, и предлагает много проблем с подключением (которые я не уверен, что когда-либо буду проходить, независимо от того, какой метод используется).

Мне нужен ваш опыт, чтобы выбрать правильное решение для моего проекта.

Я думал о C2DM, но я не уверен, что это может удовлетворить мои потребности? Является ли опрос для моего единственного реального решения? Есть ли третий вариант, о котором я не думал?

Ответы [ 3 ]

4 голосов
/ 04 ноября 2011

Я наткнулся на новый сервис под названием Parse.com , который, кажется, предлагает функциональность для легкого внедрения в Android с помощью их бэкэнда. Он коммерческий, но у них есть бесплатный план.

Если вы хотите сделать свою собственную реализацию, кажется, есть много статей об использовании MQTT, который разработан для устройств с низким энергопотреблением. Но я еще не видел готовых реализаций этого.

1 голос
/ 05 ноября 2011

Я бы посчитал MQTT хорошим решением, хотя это то, с чем я больше всего знаком. Отказ от ответственности - я пишу MQTT-брокер с открытым исходным кодом. Вы могли бы достичь того, что я думаю, вы хотите, как это:

Пусть где-нибудь работает брокер MQTT. Служба на телефоне подключается к брокеру и подписывается на уникальную тему, например, device / 23412364, где 23412364 - уникальный идентификатор для каждого устройства и именуемый ниже. Когда ваш клиент хочет отправить сообщение на определенный телефон, оно отправляется на устройство / <идентификатор телефона>. Если вы хотите, чтобы сообщения отправлялись на все телефоны, телефоны могли бы также подписаться на устройство / все, например.

Если вы сделаете для своих подписок и сообщений качество обслуживания 1 или 2 и установите для клиента параметр «чистый сеанс» на «ложь», то сообщения будут помещаться в очередь в брокере, если по какой-либо причине телефон отключится. QoS = 1 означает «хотя бы один раз», а QoS = 2 означает «ровно один раз». Когда телефон снова подключится, эти сообщения будут доставлены.

Вы также можете попросить телефон отправить сообщение типа «регистрация <идентификатор телефона>» в фиксированную тему сразу после его подключения (например, тема «регистрация»). Особенностью MQTT, которая очень полезна, является «Последняя воля и Завет». При подключении клиента у вас есть возможность указать сообщение Will и тему, по которой оно должно быть доставлено, в случае, если клиент неожиданно отключается (т. Е. Не сообщая брокеру, что он собирается отключиться). Таким образом, вы можете установить сообщение «Отменить регистрацию <номер телефона>» и отправить его в ту же фиксированную тему, что и выше («регистрация» в этом примере). Затем вы могли бы иметь другого клиента MQTT на стороне сервера, подписанного на «регистрация». Когда телефон подключается, он отправляет сообщение «register », а когда он отключается, брокер отправляет «unregister ». Поэтому клиент MQTT может отслеживать подключенных клиентов на стороне сервера.

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

Некоторые соответствующие ссылки:

0 голосов
/ 04 ноября 2011

Push-сервис?

Сам никогда не делал, но, возможно, эта ссылка может помочь

http://tokudu.com/2010/how-to-implement-push-notifications-for-android/

...