如何在没有互联网连接的情况下使应用程序与服务器通信?

15

我想知道是否有一种方法可以在没有互联网连接的情况下与用户进行通信。

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

我也读了很多关于使用USSD的内容,但似乎在iOS中不可能打开移动消息(从iphone程序调用USSD代码),虽然在Android中可以编程地调用代码,但没有USSD API,也不可能静默发送USSD消息。

是否有一种只使用基本语音短信信号就可以在我的应用程序和服务器之间传输数据的方法?

2个回答

12

您说得对,如果服务器有GSM调制解调器,短信可以用于与服务器通信。但是,对于大量的短信,您需要在您的服务器和连接到移动网络消息中心的SMS网关之间拥有互联网连接,而不是一个调制解调器。
这就是SMS投票服务器的模型。

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

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

USSD是另一种通信方式,用于移动设备和网络之间的通信,直接内置于GSM网络中,但USSD消息归网络运营商所有或获得许可,而客户无法像使用短信那样免费使用。

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

我没有直接使用WAP,但是看了一眼 WAP协议栈 后发现它确实可以在CDMA或GSM上运行而无需IP连接。还有一篇非常有用的维基百科文章。我的MMS测试经验是通常情况下,没有IP连接时它不会工作,尽管它应该可以(根据那个维基文章,用WAP/SMS)。因此,我会质疑欧洲运营商或移动设备对WAP的支持或测试程度。无论WAP是否实用,最终可能取决于定价/可用性,而不是技术问题。


嗨,谢谢你的回答。我对USSD非常感兴趣。据我所知,如果我想在我的应用程序中使用它,我需要与每个单独的网络运营商达成协议,是吗?这意味着理论上我必须向用户收费并支付一定比例的费用给运营商,或者他们可以直接在用户账单中收取费用。我将等到今晚授予赏金,因为这个问题对我来说非常重要。 - lisovaccaro
当你说 USSD 不是免费的,而 SMS 是免费的时候,你的意思是什么?你指的是自由的免费吗? - lisovaccaro
免费的两个意思。你可能正在查看类似这样的内容:http://tms.flashmedia.co.za/tms3-web/ussd.jsf(顺便说一下,我与这家公司无关,这只是一个例子)。 - user1725145
我一直在研究USSD,似乎Android没有API可以调用,所以你只能从你的应用程序中调用代码,在iOS上甚至不可能这样做。这是正确的吗?这很遗憾,因为这看起来非常有前途。 - lisovaccaro
USSD可以通过AT命令实现。AT命令可以通过Android实现,但我不知道是否符合您的要求。在SO上搜索[android][at-command]。 - user1725145

6

嗯,还有其他选项,这取决于您需要在服务器和移动设备之间传输的数据量。

对于短时间内需要传输的少量数据,您可以尝试使用Asterisk PBX,让您的手机拨打服务器电话并发送其他DTMF数字作为您的数据,然后由Asterisk PBX(类似于来自您的有线电视公司的交互式电话音频菜单)进行解释。Asterisk是GPL开源软件。

另一个选择(昂贵且需要大量工作)是生成一个带有数据内容的音频信号,并拨打与附加的传真/调制解调器PCI板连接的电话号码,像呼叫一样发送该音频。它不需要长时间通话,因为您可以在短暂的音频流中放入大量数据。

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

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

因此,对于数据类型,您可以在移动设备上保存许多短音频文件,并将它们作为数据类型播放,但使用上面提到的DTMF会更容易。或者您可以进行编码:获取可以通过语音呼叫使用的声音频谱(宽带/窄带),并将其除以所需的单个字符或块的数量(查看如何在base64中编码,以获得一些想法)。然后创建一个函数,只需将您的数据编码为短音频流(阅读有关PCM编码的内容,以及如果您想进一步复杂化(但加快速度),请阅读更多关于快速傅里叶变换的内容)。
创建一个简单的协议,如下:第一个音频包是一系列音调,用于发出请求、验证,并等待服务器的确认响应(可以通过在此后1秒钟内不挂断呼叫来实现)。第二个音频包是第一帧数据的大小,然后从第三个音频包开始,就是数据本身,其大小显示在前面。类似ftp协议的描述。然后,您需要对其进行改进,以使每个数据包的时间尽可能短,同时保持可靠性。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接