Как реализовать собственный IM-сервер для общения текстовыми сообщениями с клиентом для iPhone (push-уведомления обязательны)?

Поставлена задача организовать собственный сервер обмена короткими текстовыми сообщениями. Для этого выделили сервер на Windows 2008. Но есть обязательные условия:
- должен быть клиент для Iphone 4 - 5. Причем обязательное условие Push-уведомления;
- шифрование трафика(SSL, TLS, что-нибудь);
- весь трафик должен идти только от клиентов к серверу и обратно (Не затрагивая какие-либо сторонние ("общественные") сервисы);
Что было сделано:
- установил Openfire на сервер;
- настроил "Do not disconnect clients that are idle";
- ставил как "Send an XMPP Ping request to idle clients", так и "Send an XMPP Ping request to idle clients"
- создал несколько пользователей;
- авторизовался через WindowsPhone через IM+;
- пробовал устанавливать на Iphone'ы "ChatSecure", "Monal" и авторизовался через них(разными пользователями);
- коннект проходит без проблем, общение тоже вобщем - то происходит
НО:
- если сворачиваю приложение на Iphone, то xmpp-сессия через несколько минут завешается, и соответственно юзеры уходят в оффлайн. И если я с IM+ пишу им(на Iphone) сообщения, то push-уведомления не приходит и сообщения они эти видят только когда принудительно заходят в клиент. P.S. на WindowsPhone IM+ висит тоже в фоновом режиме, но сессию не рвёт.

В итоге прошу помощи:
- либо в какой-то хитрой настройке сервера/IPhone клиента;
- в выборе другой схемы (не jabber, а IRC или что-нибудь)

P.S. готов был бы сдаться и списать всё на "закрытость" IOS, НО ведь WhatsApp работает в фоне и сообщения приходят всегда и сессия не рвётся.
  • Вопрос задан
  • 4549 просмотров
Решения вопроса 1
@BVladymyr
Вам нужно понять, что требование наличия пуш нотификаций и "- весь трафик должен идти только от клиентов к серверу и обратно (Не затрагивая какие-либо сторонние ("общественные") сервисы);" в общем случае будут конфликтовать.

Для получения пуш нотификации нужно чтобы кто-то ее вам отправил.
Это может сделать само клиентское приложение в рамках выполнения фоновой задачи или бекенд сервис клиентского приложения. Чаще используется именно 2-й подход, в котором часть трафика проходит собственно через сервер клиента.

Более того, Push Service ( Microsoft или Apple) по сути тоже является сторонним сервисом по отношению к вашему серверу.

Самым простым решением будет принять, что ваш трафик проходит через клиент, бекенд клиента и Пуш сервера Apple.

В этом случае вы можете выбирать из множества клиентов.
К примеру использовать тот же IM+. Для "страшных секретов" в нем есть функция OTR для проведения безопасной переписки, при которой точно только собеседник может прочитать сообщение(Эта функция не работает в режиме пуш).

Иначе вам нужно искать клиент, который может работать в фоне. Далеко не каждое приложение может задекларировать такую возможность. Часто это GPS Traker -ы и, как заметил risik, VOIP.
Даже если вы его найдете, учитывайте то, что пользователь и система может блокировать работу приложения в фоне.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
risik
@risik
Программист
На iOS есть возможность не рвать сессию если Ваше приложение - voip клиент. Тогда с некоторыми ограничениями такими, например, как количество квантов времени CPU за единицу времени, Ваше приложение сможет работать в фоне. В противном случае, нужно отправлять push уведомления. Вы не сможете это сделать с использованием стороннего клиента, но без использования сторонних серверов. Либо делайте свой клиент. Либо ищите клиент, который предоставляет возможность передать push уведомление через свой сервер (я таких не знаю).

Возможно, вам удастся обеспечить все Ваши хотелки, если найдете SIP приложение, умеющее работать с Вашим SIP сервером.
Ответ написан
Комментировать
@hypertonyc Автор вопроса
Т.е. если я настрою в asterisk текстовые сообщения(типа как здесь), и найду клиент на IPhone, который эти сообщения умеет, то он будет работать в фоновом режиме нормально?
"...который предоставляет возможность передать push уведомление через свой сервер ". Не совсем понимаю, что значит "передать push уведомление". Если Вы говорите, что в IOS "не voip" приложения в фоне не работают, как сервер может передать туда push уведомления?
Ответ написан
@aitopicstarter
hypertonyc, скажите, а отправки push-уведомлений со стороны openfire добиться удалось, и дело только в клиенте?
Ответ написан
Комментировать
@Danek2003
Присоединяюсь
"hypertonyc, скажите, а отправки push-уведомлений со стороны openfire добиться удалось, и дело только в клиенте?"
Реально ли вообще openfire заставить push слать ?
Ответ написан
Комментировать
@billybons2006
)) Присоединяюсь. В точности такая же задача стоит. Как решили?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы