Как общаться с сервером без подключения к Интернету?

Я хочу знать, есть ли способ связаться с пользователями без подключения к Интернету на сервере.

Я думал, что это возможно с помощью SMS и машиночитаемой кодировки. Однако этот вопрос подтверждает, что приложения iOS позволяют отправлять, но не читать SMS: iphone app reading sms

Я также много читал об использовании USSD, но кажется, что мобильные открытые сообщения невозможно в iOS (набирать код USSD с программным обеспечением iphone) и в то время как в Android можно запрограммировать код программно, нет API USSD и не может отправлять сообщения USSD молча.

Есть ли способ передать данные между моим приложением и моим сервером только с базовым сигналом голосового sms?

Ответ 1

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

Вы можете отправлять/получать SMS, если у вас есть сеть GSM, и вы правы; IP-соединение не требуется. Платформа Android позволяет отправлять и получать SMS-сообщения - здесь.

Недостатки в том, что SMS может быть дорогостоящим и не имеет гарантированной доставки, а также гарантированное время доставки. Он не подходит для обмена в реальном времени.

USSD - это еще одна форма связи между мобильным устройством и сетью, которая встроена непосредственно в сеть GSM, но сообщения USSD принадлежат или лицензируются сетевыми операторами и не являются бесплатными для использования пользователями, поскольку это SMS.

EDIT: USSD не является родным протоколом в CDMA, но различные реализации доступны от разных операторов. Например, здесь патентная заявка, описывающая идею для одной такой системы, которая, как представляется, не требует IP-соединения. Googling "USSD CDMA" также дает различные новости о коммерческих реализациях, технические данные неизвестны. Я думаю, вам просто нужно выяснить, что предлагают ваши целевые операторы.

Я не работал напрямую с WAP, но взгляд на WAP Protocol Stack показывает, что он действительно может работать через CDMA или GSM без IP-соединения. Существует также очень полезная статья Wikipedia. Мой опыт тестирования MMS заключается в том, что он обычно не работает без IP-соединения, хотя предполагается, что он (согласно этой статье Wiki, с WAP/SMS). Поэтому я бы поставил под вопрос, насколько европейские операторы или мобильные устройства поддерживают или тестируют WAP. Является ли WAP практическим выбором, возможно, снизится до цены/доступности в конце дня, а не технических проблем.

Ответ 2

Ну, есть еще другие варианты, в зависимости от объема данных, которые вам нужно передать обратно и обратно на сервер.

Вместо sms, для небольшого объема данных вы можете попытаться реализовать Asterisk PBX, когда ваш мобильный телефон вызывается на ваш сервер, а затем отправляет другие DTMF цифры в качестве ваших данных, которые будут интерпретироваться вашей Asterisk PBX (например, интерактивное звуковое меню телефона от вашей кабельной компании). Asterisk является открытым исходным кодом GPL.

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

Ваш сервер может проверять эти данные, сохраняя содержимое на принимающей стороне. Просто запись вызова с подключенной платы факса/модема pci, или вы можете использовать сервер PBX Asterisk на локальном компьютере для сохранения аудиофайла, а затем обработать ваше серверное программное обеспечение.

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

Итак, для типов данных вы могли бы просто сохранить много коротких аудиофайлов на своем мобильном устройстве и воспроизвести их как свои типы данных, но было бы проще просто пойти на DTMF, уже упомянутый выше. Или вы можете кодировать так: получить спектр звука, разрешенный для использования через голосовые вызовы (широкополосный/узкополосный), и разделить его на количество необходимо указать отдельные символы или фрагменты (посмотрите, как закодировать в base64, чтобы иметь некоторые идеи). Затем создайте функцию, чтобы просто кодировать ваши данные как короткий аудиопоток (читайте кодирование PCM, а также читайте больше о Быстрое преобразование Фурье, если вы хотите еще больше усложнить (но ускорить).

Создайте простой протокол, подобный этому: первый аудиопакет представляет собой последовательность тонов, которая делает запрос, проверяет подлинность и ожидает ответа на подтверждение с сервера (что может быть просто не отбрасыванием вызова через 1 секунду после этого). Второй аудиопакет - это размер первого кадра данных, затем третий аудиопакет - это сами данные с размером, показанным ранее. И так далее. Посмотрите описание протокола ftp для простоты. Затем вам нужно доработать его так, чтобы время каждого вышеперечисленного пакета было наименее возможным, в то время как он поддерживал доверительность.

Для экономии средств при голосовом вызове вы также можете изучить варианты номера телефона, такие как Google Voice, Skype или любой сервис Voip.