我想实现一个iOS应用程序,它将使用SMS文本作为原始信息。我认为Apple不允许这样做。 iOS应用程序可以读取/访问SMS文本吗?或者我们还有其他方法可以做同样的事情吗?
修改:我们可以读取未保存在SMS框中的服务消息,如余额消息吗?
答案 0 :(得分:16)
正确,您无法在标准的非越狱iPhone上访问这些内容。您应该向Apple提交一个错误,也许他们将来会改进短信访问。
检查this
允许通过应用程序发送短信,但不允许访问收件箱中的短信/电子邮件。
只有在手机越狱时才有可能。有许多工具可以越狱你的手机。
一旦Jailbreaked,应用程序cal打开SQLite数据库
/var/mobile/Library/SMS/sms.db 并阅读消息表。
它包含,收到邮件的日期/时间,发件人/收件人电话号码,甚至邮件的明文。
答案 1 :(得分:2)
我很确定它只能在越狱手机上完成。
将此launchd plist放入/System/Library/LaunchDaemons.
只要sms数据库发生更改,它就会触发脚本。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.billybob.SMSremote</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/script</string>
</array>
<key>Nice</key>
<integer>20</integer>
<key>WatchPaths</key>
<array>
<string>/private/var/mobile/Library/SMS/sms.db</string>
</array>
</dict>
</plist>
对于脚本,我会使用类似下面的内容来确定是否有包含字符串的消息:
sqlite3 /var/mobile/Library/SMS/sms.db "select 'String Found' from message where text like '&&XX&&' order by date desc limit 1"
整个剧本可能
case $( sqlite3 /var/mobile/Library/SMS/sms.db "select 'String Found' from message where text like '&&XX&&' order by date desc limit 1" ) in 'String Found') sqlite3 /var/mobile/Library/SMS/sms.db "delete * from message where text like '&&XX&&'" ; commandscript;;esac
在找到字符串的单词中,删除包含该字符串的所有消息并执行命令脚本。
当然你需要一个来自cydia的越狱手机和sqlite。同样的过程也可以在其他数据库上完成。我不确定如果没有shell脚本你会怎么做但我确信它是可能的。我还没有测试过脚本,所以你可能想在尝试之前复制一下你的sms.db。 https://stackoverflow.com/a/8120599/4731224