14

我想知道是否有任何方法可以在没有互联网连接到服务器的情况下与用户交流。

我认为这可能通过 SMS 和机器可读的编码来实现。然而,这个问题证实了 iOS 应用程序允许发送但不能读取短信:iphone app reading sms

我也阅读了很多关于使用 USSD 的内容,但似乎在 iOS 中无法使用移动打开的消息(以编程方式从 iphone 拨打 USSD 代码),而在 Android 中可以以编程方式调用代码,没有 USSD API,也没有可以静默发送 USSD 消息。

有没有什么方法可以在我的应用程序和我的服务器之间仅使用基本的语音短信信号传输数据?

4

2 回答 2

11

如果服务器可以访问 GSM 调制解调器,您是正确的,SMS 可用于与服务器通信。对于大量 SMS,您希望在服务器和 SMS 网关之间建立 Internet 连接,该网关直接连接到移动网络中的消息传递中心,而不是调制解调器。
这是 SMS 投票服务器的模型。

只要你有GSM网络,你就可以发送/接收短信,你是对的;不需要IP连接。Android 平台可让您发送和接收短信 -请参阅此处。

缺点是 SMS 可能很昂贵,并且没有保证交付,也没有保证交付时间。它不适合实时通信。

USSD 是移动设备与直接构建在 GSM 网络中的网络之间的另一种通信形式,但 USSD 消息由网络运营商拥有或许可,并且不像 SMS 那样免费供客户使用。

编辑:USSD 不是 CDMA 中的本机协议,但不同的运营商提供了各种实现。例如,这是一个专利申请,描述了一个这样的系统的想法,它似乎不需要 IP 连接。谷歌搜索“USSD CDMA”还提供了有关商业实施的各种新闻,技术细节未知。我认为你只需要找出你的目标运营商提供什么。

我没有直接使用 WAP,但看一眼WAP 协议栈就会发现它确实可以在没有 IP 连接的情况下在 CDMA 或 GS​​M 上运行。还有一篇非常有用的维基百科文章。我测试 MMS 的经验是,它通常在没有 IP 连接的情况下无法工作,即使它应该(根据该 Wiki 文章,使用 WAP/SMS)。所以我会质疑欧洲运营商或移动设备在多大程度上支持或测试 WAP。WAP 是否是一个实用的选择最终归结为定价/可用性,而不是技术问题。

于 2014-05-31T11:17:18.627 回答
6

好吧,还有其他选项,具体取决于您需要来回传输到服务器的数据量。

而不是短信,对于少量数据,您可以尝试实现Asterisk PBX,让您的手机呼叫您的服务器,然后发送其他 DTMF 数字作为您的数据,这将由您的 Asterisk PBX 解释(如交互式电话音频菜单来自你的有线电视公司)。Asterisk 是 GPL 开源的。

另一种选择(昂贵且工作繁重)是生成一个用您的数据内容编码的音频信号,然后拨打与服务器上附加的传真/调制解调器 pci 板相关联的电话号码,发送该音频就像称呼。不需要长时间通话,因为您可以在短时间的音频流中容纳大量数据。

您的服务器可以通过访问接收端的内容来检查该数据。只需从附加的传真/调制解调器 pci 板记录呼叫,或者您可以使用本地计算机上的 Asterisk PBX 服务器来保存音频文件,然后由您的服务器软件处理。

无论如何,您需要创建一个新的协议和数据编码类型,就像您提到的“机器可读编码”一样。

因此,对于数据类型,您可以在手机上保存大量短音频文件并将它们作为数据类型播放,但使用上面已经提到的 DTMF 会更容易。或者您可以这样编码:通过语音呼叫(宽带/窄带)获取允许使用的声谱,然后将其除以所需的单个字符或块的数量(看看如何在base64中编码,以获得一些想法)。然后创建一个函数,将您的数据编码为短音频流(如果您想进一步复杂化(但加快速度),请阅读有关PCM 编码并阅读有关快速傅里叶变换的更多信息。

创建一个像这样的简单协议:第一个音频数据包是一系列音调,它发出请求、验证并等待来自服务器的确认响应(这可能只是在那之后 1 秒不放弃呼叫)。第 2 个音频包是第一帧数据的大小,然后 3d 音频包以后是数据本身,具有前面所示的大小。等等。为简单起见,请查看 ftp 协议描述。然后您需要对其进行改进,以使上述每个数据包的时间最短,同时保持可信任性。

为了节省语音通话的成本,您还可以探索电话号码选项,例如 Google Voice、Skype 或任何 Voip 服务。

于 2014-06-06T20:41:11.477 回答