2014-12-20 6 views
0

Я работаю над приложениями для совместного использования ресурсов между пользователями. Google Cloud Messaging, я могу уведомить целевую аудиторию о том, что у него новая задача. Проблема в том, что GCM не предлагает гарантию доставки. Будет ли кто-то использовать приложение вроде WhatsApp, если он заработает несколько минут, чтобы доставить сообщение или не прийти? Это моя проблема с GCM.Приложение в реальном времени Android

Итак, у меня есть решение: используйте Socket !!!

Использование Socket.oi и Node.js, моя мечта стала действительно работающей, как магия !!! Но поскольку ничто не является бесплатным, держите соединение сокета очень дорого для батареи. Некоторые люди утверждают, что использование сокетов, когда нет связи, ничего не происходит или нет, нет циклов, поэтому нет потребления.

Мои друзья, я прочитал много текста и не знаю, с каким подходом я должен следовать. Я прошу вашу помощь. Soket.oi? WebSocket ???

Как поддерживать соединение с моей перманентной версией, сохраняя большую часть батареи?

Я ценю помощь каждого!

ответ

0

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

упрощенный сценарий может выглядеть следующим образом:

  1. пользователь запускает ваш клиенту
  2. регистров клиентского приложения в GCM и отправляет идентификатор Google на свой сервер.
  3. клиентское приложение устанавливает подключение к сокету
  4. сервер отправляет сообщения клиенту через GCM и сокет-соединение (если это установить с определенной связи)
  5. каждое сообщение имеет уникальный идентификатор, поэтому клиент может просто игнорировать второе идентичное сообщение от Google о связи сокета

о не доставленных сообщений:

Когда клиент подключается к серверу через сокет-соединение так ли Shou ld получает ответ, где должна быть указана история сообщений. Это не должна быть полная история, это может быть просто последнее сообщение (если вы разрабатываете чат-приложение). Затем клиент просто проверяет, уведомил ли он пользователя о последнем сообщении или нет. Если нет, то ваш клиент делает запрос (http или через сокет) на ваш сервер и получает недопустимые сообщения. Расход

Батареи:

Не приобретать замок бодрствования поддерживать сокет-соединение! Устройство должно спать. GCM пробудит трубку.

+0

Спасибо, человек !!!! Я думаю об этом ... моя большая проблема связана с GCM, который иногда не уведомляет о доставке, но вы включили лампу в моей голове, мне просто нужно созреть эту идею, сохранить в сообщениях DB и через сокет-контроль, что приложение знает об этом. СПАСИБО!!!! – lfaa

+0

@lfaa, пожалуйста. Если мой ответ действительно помог вам, отметьте его как решение. Благодаря! – eleven

0

Socket.io - это хорошо и, безусловно, полезно во многих приложениях реального времени, но что происходит, когда приложение прерывается пользователем? Или, если пользователь перезапустит свой телефон? Как вы получите уведомления?

Для всех целей GCM достаточно хорош.

+0

Благодарим вас за внимание ... ну в случае необходимости поддерживать соединение живым все время, объект сокета должен запускаться внутри службы, где его можно запустить с помощью широковещания и привязки приложением ...моя большая проблема заключается в том, как поддерживать связь и экономить батарею одновременно. Как контролировать, если пользователь убивает, перезапускает и так далее, мы можем управлять им без особых проблем ... но спасибо вам за внимание :-) – lfaa

+0

Привет, у меня такая же проблема. Вы нашли решение для этого? Любая помощь будет оценена. – Mangesh

Смежные вопросы