Синхронизация чата в фоновом режиме в IOS

У меня есть чат-приложение, разработанное JS. Я хочу отправить PING на сервер время от времени. Это не проблема, если приложение работает на переднем плане. Проблема заключается в том, когда пользователь сводит к минимуму его или открывает другое приложение. Мое приложение теряет свое внимание и переходит в приостановленное состояние.

У меня есть два варианта использования.

  • Чтобы открыть сеанс чата, мне нужно отправить PING на сервер (его IRC-сервер) каждые X минуты, даже приложение работает в фоновом режиме.
  • Нам также нужно проверить новые сообщения (через ajax на локальном http-сервере) и добавить локальное уведомление в очередь уведомлений, поэтому, когда пользователь нажимает на него, приложение может возобновить

Я нашел, что яблоко не позволяет запускать приложения в фоновом режиме. если они разрешают им требовать специального разрешения. Я нашел, что некоторые приложения делают это, запрашивая время выполнения конечной длины. Каков наилучший способ получить максимально возможное время выполнения фона? Как приложение для чата я могу запросить разрешение для voip, location или любым другим способом?

Примечание. Приложение будет работать в среде, где нет Интернета. Следовательно, push-уведомление не будет работать здесь.

Обновление. После многократного поиска я нашел фоновый выбор. Похоже, что фоновая выборка сгруппирует его. Но проблема остается, ее не называют своевременно.

Ответ 1

Это звучит как интересная проблема. Из чтения различных комментариев кажется, что вы хотите, чтобы это работало, когда вы находитесь в локальной сети, - так что у вас есть Wi-Fi, но Wi-Fi маршрутизатор/базовая станция не подключена к интернету?

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

Вы можете посмотреть на поддержку iOS VOIP, только без Голоса! В Apple есть несколько советов по VOIP здесь. VOIP в основном использует что-то, называемое SIP (Session Initiation Protocol), которое является сигнальным слоем вызова, и подобно HTTP. Это этот слой SIP, который вы хотите использовать.

Это не будет ужасно легко, но это должно быть достижимо. Настройте приложение для использования VOIP, а затем просмотрите что-то вроде PJSip в качестве вашей библиотеки SIP. Затем в вашей локальной сети есть SIP-сервер (я уверен, что есть много версий с открытым исходным кодом), с которыми вы можете зарегистрировать свой iPhone (так что ваш сервер знает, где находится ваш телефон, притворяясь телефоном VOIP). Это должно сработать, потому что ему не нужно проходить через Apple, насколько мне известно... И будет работать с радостью в вашей локальной сети.

Затем сервер может отправить сообщение через SIP на телефонную трубку, как если бы он инициировал сеанс VOIP. Ваше приложение пробудилось, получает сообщения - в идеале, из сообщения SIP, если это возможно, - а затем просто не запускает сеанс. SIP был разработан только для создания сеансов, а не только для VOIP. Когда я работал в Telecoms R & D (давным-давно), мы использовали его для обмена между Text/Voice/Video, используя все локальные серверы.

Вам нужно будет поднять много обручей, чтобы сделать эту работу, но это было бы довольно удивительно. Я никогда не пробовал этот фактический прецедент - особенно с iOS, но я уверен, что он сработает. Это немного выдумка, но вам нужно, когда вам нужно идти.

Удачи!

Ответ 2

Вы можете использовать что-то вроде PubNub для создания этого чат-приложения с iOS с использованием собственного кода Objective-C или с помощью пакетов Phonegap (Cordova).

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

Когда приложение находится на переднем плане, оно может просто получить их как собственное (PubNub) сообщение. И если ему нужно "догнать" сообщения, которые он пропустил в фоновом режиме (но получил через APNS), его тривиально реализовать.

Кроме того, PubNub является агностикой платформы, поэтому вы можете легко использовать его в Интернете, Android, BB, Windows Phone и т.д.

http://www.pubnub.com/blog/build-real-time-chat-10-lines-code/

http://www.pubnub.com/blog/html5-websockets-beautiful-real-time-chat-on-mobile-using-pubnubs-channel-presence/

https://github.com/pubnub/objective-c/tree/master/iOS

https://github.com/pubnub/javascript/tree/master/phonegap

Geremy