控制iPhone短信收发

盛大最近在做“有你”类似iMesssage、TextFreek、biteSMS的应用,主要功能是拦截短信录取联系人并控制短信收发。Android、Symbian等其他移动平台都可以,唯独iOS这块不行,没有这个官方SDK和权限。需要越狱才能达到以上这些功能。

虽然这个有点不太道德,但是还是答应下来。最近两天潜心研究,得出成果,如下:

发短信一般有两种方式,一是打开/dev/tty.debug使用AT命令操作,二是直接使用apple的私有库(CoreTelephony)操作。

第一种:
使用通过minicom的sendmodem(http://code.google.com/p/iphone-elite/wiki/sendmodem)发送AT。
像设置信息格式等一般的命令都可以很好的执行,但是像读取信息、发送信息等这样的命令一概会报ERROR。
而且这个方法有个弊端,因为minicom一定要再关闭通讯中心(launchctl unload -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist
后才能使用,所以在执行AT命令过程中是没有其他程序能够通过运营商通道通讯,比如不能通过原有程序打电话和发短信。

以下是收集的一些AT资源:
sendmodem:http://code.google.com/p/iphone-elite/wiki/sendmodem
C:http://blog.csdn.net/xinghexiyue/archive/2011/03/23/6270732.aspx
iphone-sms:http://code.google.com/p/iphone-sms/
A Convenient Tool to Send AT Commands:http://george.insideiphone.com/index.php/2007/11/25/a-convenient-tool-to-send-at-commands/

第二种:
添加CoreTelephony框架(在4.0以下是Private API),但是在4.0以上这个框架变成Public API,取消了所有的通讯功能,只有一些无关痛痒的功能(比如返回运营商信息)。

第三种:
使用 MessageUI框架中的MFMessageComposeViewController,可以在App中发送短信。但是不能修改发送短信UI,也不能自动发送短信。

总结:
以上方法对于“有你”的要求都不行。还有几个方法在尝试中,测试完毕也会及时更新。