Как связать приложение с сервером без подключения к интернету?
Я хочу знать, есть ли способ общения пользователей без подключения к интернету к серверу.
Я думал, что это может быть возможно с помощью SMS и машиночитаемой кодировки. Однако этот вопрос подтверждает, что приложения для iOS позволяют отправлять, но не читать SMS: приложение для iphone читает смс
Я также много читал об использовании USSD, но кажется, что мобильные открытые сообщения невозможны в iOS ( набирать код USSD с iphone программно), и хотя в Android можно программно вызывать код, нет ни USSD API, ни можно отправлять USSD-сообщения без уведомления.
Есть ли способ передачи данных между моим приложением и моим сервером только с помощью базового голосового смс-сигнала?
2 ответа
Вы правы, что SMS может использоваться для связи с сервером, если сервер имеет доступ к GSM-модему. Для больших объемов SMS-сообщений вы ожидаете иметь интернет-соединение между вашим сервером и шлюзом SMS, который подключается непосредственно к центру обмена сообщениями в мобильной сети вместо модема.
Это модель SMS-голосования.
Вы можете отправлять / получать SMS, если у вас есть сеть GSM, и вы правы; IP-соединение не требуется. Платформа Android позволяет отправлять и получать SMS-сообщения - см. Здесь.
Недостатки в том, что SMS могут быть дорогими и не имеют гарантированной доставки и не гарантированного времени доставки. Это не подходит для общения в реальном времени.
USSD - это еще одна форма связи между мобильным устройством и сетью, которая встроена непосредственно в сеть GSM, но сообщения USSD принадлежат или лицензируются операторами сети и не являются бесплатными для пользователей, как SMS.
РЕДАКТИРОВАТЬ: USSD не является родным протоколом в CDMA, но различные реализации доступны от разных операторов. Например, вот патентная заявка, описывающая идею для одной такой системы, которая, по-видимому, не требует IP-соединения. Поиск в Google "USSD CDMA" также дает различные новости о коммерческих реализациях, технические детали неизвестны. Я думаю, вам просто нужно выяснить, что предлагают ваши целевые операторы.
Я не работал напрямую с WAP, но взгляд на стек протоколов WAP показывает, что он действительно может работать через CDMA или GSM без IP-соединения. Есть также очень полезная статья в Википедии. Мой опыт тестирования MMS заключается в том, что он обычно не работает без IP-соединения, хотя и должен (согласно той статье Wiki, с WAP/SMS). Поэтому я хотел бы спросить, насколько европейские операторы или мобильные устройства поддерживают или тестируют WAP. То, является ли WAP практическим выбором, может зависеть от цены / доступности в конце дня, а не от технических проблем.
Ну, есть и другие варианты, в зависимости от объема данных, которые вам нужно передать туда и обратно на сервер.
Вместо смс, для короткого объема данных вы можете попытаться внедрить АТС Asterisk, когда ваш мобильный телефон вызывает ваш сервер, а затем отправляет другие цифры DTMF в качестве ваших данных, которые будут интерпретироваться вашей АТС Asterisk (как интерактивное звуковое меню телефона от ваша кабельная компания). Asterisk - это GPL с открытым исходным кодом.
Другой вариант (дорогой и с тяжелой работой) будет генерировать аудиосигнал, закодированный с вашим содержимым данных, и набирать телефонный номер, связанный с подключенной факс / модемом pci, на сервере, отправляя этот звук как вызов. Это не должно быть длинным звонком, так как вы можете разместить много данных в коротких пакетах аудиопотока.
Ваш сервер может проверить эти данные, обработав содержимое на принимающей стороне. Просто записывайте вызов с подключенной платы факса / модема или вы можете использовать сервер АТС Asterisk на локальном компьютере, чтобы сохранить аудиофайл и затем обработать его с помощью программного обеспечения вашего сервера.
В любом случае вам нужно будет создать новый протокол и тип кодирования данных, как вы упомянули "машиночитаемое кодирование".
Таким образом, для типов данных вы можете просто сохранить множество коротких аудиофайлов на своем мобильном телефоне и воспроизводить их как свои типы данных, но было бы проще просто перейти на DTMF, уже упомянутый выше. Или вы можете кодировать следующим образом: получить спектр звука, который можно использовать посредством голосового вызова (широкополосный / узкополосный), и разделить его на количество необходимых символов или кусков (посмотрите, как кодировать в base64, чтобы получить некоторые идеи). Затем создайте функцию, которая будет просто кодировать ваши данные в виде короткого аудиопотока (читайте о кодировании PCM, а также читайте больше о быстрых преобразованиях Фурье, если вы хотите еще больше усложнить (но ускорить).
Создайте простой протокол, подобный следующему: первый аудиопакет - это последовательность тонов, которая отправляет запрос, аутентифицирует и ожидает ответа от сервера о подтверждении (что может быть просто, не прерывая вызов через 1 секунду после этого). Второй аудиопакет - это размер первого кадра данных, затем трехмерный аудиопакет - это сами данные с указанным ранее размером. И так далее. Посмотрите описание протокола ftp для простоты. Затем вам нужно уточнить его так, чтобы время каждого вышеупомянутого пакета было наименьшим возможным при сохранении достоверности.
Чтобы сэкономить на голосовых вызовах, вы также можете изучить варианты телефонных номеров, такие как Google Voice, Skype или любой VoIP-сервис.