我想知道是否有任何方法可以在没有互联网连接的情况下与用户进行通信。
我认为可能通过短信和机器可读编码。然而,这个问题证实iOS应用程序允许发送但不能阅读短信:iphone app reading sms
我也读了很多关于使用USSD的内容,但似乎在iOS(dial USSD code from iphone programatically)中移动打开的消息是不可能的,而在Android中可以以编程方式调用代码没有USSD API,也无法静默发送USSD消息。
有没有办法在我的应用程序和我的服务器之间传输数据只有基本的语音信号?
答案 0 :(得分:9)
如果服务器可以访问GSM调制解调器,则可以使用SMS与服务器通信。对于大量的SMS,您希望在服务器和SMS网关之间建立Internet连接,该网关直接连接到移动网络中的消息中心,而不是调制解调器。
这是SMS投票服务器的模型。
只要您拥有GSM网络,就可以发送/接收短信,而且您是对的;不需要IP连接。 Android平台可让您发送和接收短信 - see here.
缺点是SMS可能很昂贵,并且没有保证交付,也没有保证交货时间。它不适合实时通信。
USSD是移动设备与直接内置于GSM网络的网络之间的另一种通信形式,但USSD消息由网络运营商拥有或许可,并且不像SMS那样免费供客户使用。 编辑:USSD不是CDMA中的本地协议,但是可以从不同的运营商获得各种实现。例如,这里有一个patent application描述了一个这样的系统的想法,它似乎不需要IP连接。谷歌搜索“USSD CDMA”还提供了有关商业实施的各种新闻,技术细节未知。我想你只需要找出你的目标运营商提供的产品。我没有直接使用WAP,但只需看一眼WAP Protocol Stack 就可以看出它确实可以在没有IP连接的CDMA或GSM上运行。还有一篇非常有用的Wikipedia文章。我测试MMS的经验是,如果没有IP连接它通常不起作用,即使它应该(根据Wiki文章,使用WAP / SMS)。所以我会质疑欧洲运营商或移动设备支持或测试WAP的程度。 WAP是否是一个实用的选择可以归结为在一天结束时的定价/可用性,而不是技术问题。
答案 1 :(得分:4)
嗯,还有其他选项,具体取决于您需要来回传输到服务器的数据量。
对于短数据,您可以尝试实现Asterisk PBX,而不是您的移动电话呼叫您的服务器,然后发送其他DTMF数字作为您的数据,这将由您的Asterisk PBX解释(如来自有线电视公司的交互式电话音频菜单)。 Asterisk是GPL开源的。
另一种选择(昂贵且需要做大量工作),可以生成用您的数据内容编码的音频信号,并拨打与服务器上连接的传真/调制解调器pci板链接的电话号码,然后发送音频就像一个电话。它不需要长时间通话,因为您可以在短时间的音频流中填充大量数据。
您的服务器可以通过访问接收端的内容来检查该数据。只需从连接的传真/调制解调器pci板录制呼叫,或者您可以使用本地计算机上的Asterisk PBX服务器保存音频文件,然后通过服务器软件进行处理。
无论如何,您需要创建一个新的协议和数据编码类型,就像您提到的“机器可读编码”一样。
因此,对于数据类型,您可以在移动设备上保存大量短音频文件并将其作为数据类型播放,但是更容易选择上面提到的DTMF。或者您可以这样编码:获取sound spectrum allowed to use through the voice call (Wideband/Narrowband),并将其除以所需的单个字符或块的数量(看看如何在base64中编码,以获得一些想法)。然后创建一个函数,将您的数据编码为一个简短的音频流(阅读PCM encoding,如果您想进一步复杂化(但速度加快),还可以阅读更多关于Fast Fourier transforms的信息。
创建一个这样的简单协议:第一个音频数据包是一系列音调,它们发出请求,进行身份验证,并等待来自服务器的确认响应(这可能只是在此之后1秒钟没有丢弃呼叫)。第二个音频数据包是第一个数据帧的大小,然后3d音频数据包就是数据本身,其大小如前所示。等等。为简单起见,请查看ftp协议说明。然后你需要对它进行优化,以便在保持可靠性的同时,上面每个数据包的时间最少。
为了节省语音通话费用,您还可以浏览电话号码选项,例如Google Voice,Skype或任何Voip服务。