我想实现一个 iOS 应用程序,它将使用 SMS 文本作为原始信息。我认为苹果不允许这样做。iOS 应用程序可以读取/访问 SMS 文本吗?还是我们有任何其他方法可以做到这一点?
修改:我们可以阅读余额消息等未保存在短信框中的服务消息吗?
正确,您无法在标准的非越狱 iPhone 上访问这些内容。您应该向 Apple 提交错误,也许他们将来会改进 SMS 访问。
检查这个
允许通过应用程序发送短信,但不允许访问收件箱以获取短信/电子邮件。
只有当手机越狱时才有可能。有很多工具可以越狱你的手机。
越狱后,应用程序会在以下位置打开 SQLite 数据库
/var/mobile/Library/SMS/sms.db 并读取消息表。
它包含收到消息的日期/时间、发件人/收件人的电话号码,甚至是消息的明文。
我很确定它只能在越狱手机上完成。
将这个已启动的 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