轶哥

📚 Having fun with AI Agent. Always learning.

首款iPhone短信自动转发到Android的APP
  •   更新:2023-08-28 21:24:45
  •   首发:2023-08-28 21:24:45
  •   随笔
  •   9301

由于工作需要,长期以来我都是iPhone作为主力机,安卓作为备用机。经常出现iPhone在充电的时候需要接收验证码。为了实现备用机和主力机一致的功能体验,特地让AI帮我写了一个APP实现“iPhone短信自动转发到Android手机”。

众所周知,Android手机APP是可以可以申请读取短信内容权限的,实现Android短信自动转发或者自动识别验证码是比较容易的。但是目前为止,我并没有发现市面上存在IOS应用程序可以实现读取短信的。真的没有办法实现读取短信内容吗?带着疑问我让AI帮忙翻阅了Apple开发者文档,最后发现其实是可以实现这个功能的。

androidstudio.png

在Win11中使用新版Android Studio开发体验真的非常棒,在最新硬件的加持下,媲美IOS开发体验。

绝大部分代码由AI完成,否则我也无法在一天之内完整这个应用程序的开发。不过AI的Bug也是真的多,整个过程我真机测试调试了一百多次,发了一百多条短信。

preview.jpg

最终在第二天凌晨1点左右完成了所有功能的开发。实现了我能想到的所有刚需功能。

iphone2android.gif

最终实现的功能:

  1. 实时和iPhone通讯,接收iPhone端自动转发过来的短信。
  2. 展示Android和iPhone的实时连接状态,任意一端不在线,另一端可以收到离线提醒。例如iPhone放在书包无电量自动关机后,Android端将会显示离线状态。由此保障了只使用Android端的时候能确保收到短信。
  3. 复制及转发短信的功能,目前无法实现回复短信的功能。
  4. “已读”状态提示,Android读过的短信会自动在iPhone中标记已读状态。
  5. 实现了Android端的开机自动启动,“前台服务”功能,实现始终保活(保持后台运行,不会被系统强制自动关闭),由于整个应用只有一个简单的Service,内存占用极低,几乎不影响续航。Ios端和Android端开机自动连接。任意一端都可以随意开关机,实现整个转发过程是无感的。
  6. 当通过Android系统通知界面移除通知的时候,自动已读Ios端短信。在我的使用场景下,短信主要功能就是接收验证码,看完了通知就直接标记已读更省事
  7. 实现了一键已读全部和删除所有历史短信的功能。

我希望实现但暂时没有实现的功能:

  1. 通过WebRTC实现点对点音视频通话,从而实现Android端接听电话的功能。理论上是可以实现的,但是我用了其他替代方案,就没有去做了。借助CallKit可以实现无需事先启动iPhone端APP接听音视频,这个功能之前我在视频系统中实践过,用户体验极佳。另一种方法,可以通过呼叫转移实现主力机没有接听的时候转发到备用机,也可以通过APP自动设置,监测到Android手机被使用的时候,自动设置呼叫转接到备用机,如果Android手机3分钟没有使用,自动设置取消呼叫转移。当然还有其他方法,这里就不再赘述了。
  2. iPhone端已读短信后同步到Android端。这个功能由于Android端缺少写入默认短信应用信息的API而不得不放弃。

借助第三方实现的功能:

  1. 借助开源的短信转发器,可以实现安卓自动转发到iPhone。这样就是双方互相转发了。
  2. 实现了来电同时显示在iPhone和Android端,可以在任意一端接听,也可以在任意一端挂断后另一端同步挂断。

总结:

本来计划开源APP代码的,但是考虑到这个应用极有可能被不法分子利用,最终放弃开源。

由于精力限制,暂时没有进行APP备案和上架。

打赏
交流区(13)
云天明

可以在iPhone锁屏状态下转发短信吗?

2023年10月13日 06:15回复
云天明

公司值班的同事找我要验证码登录系统,有时我在睡觉没看到,能否分享一下IPA文件

2023年10月13日 06:17回复
轶哥

很抱歉,出于客观原因暂时无法分享。

2023年10月13日 06:49回复
云天明

大神,Apple开发者文档能不能获取手机蜂窝网络信息的方法,就是在拨号界面输入"3001#12345#"弹出的信息,包含Serving Cell Info(BAND,Cell ID,PCI等),通过开发一个app来获取这些信息,而不用每次输入拨号。

2023年10月20日 03:06回复
轶哥

Apple的iOS SDK并未公开API来直接获取以"3001#12345#"访问的Field Test模式中的蜂窝网络信息。这类信息被认为是敏感且低级的,开发者通常是被阻止访问的。 一些私有API可能能提供这类信息,但是使用私有API的应用无法通过App Store的审核,因此这可能不是一个可行的解决方案。

2023年10月20日 03:11回复
浅淡湮香

如果只是为了收新短信,用树莓派应该也能做到转发功能。

苹果是不允许读取用户的短信内容,但是短信拦截功能是可以变相的做到。

https://developer.apple.com/documentation/sms_and_call_reporting/sms_and_mms_message_filtering

2023年10月26日 04:37回复
轶哥

短信拦截API没有办法获取对方的手机号。

除了ios平台,其他平台要转发短信应该都挺容易的。

2023年10月26日 04:45回复
牛肥肥

作者老哥,代码不开源。可以大致说一下实现思路吗😕

2023年11月29日 13:21回复
轶哥

直接问AI吧😂

2023年11月29日 13:24回复
轶哥

由于我使用的方案并不需要“快捷指令”等APP的配合。也无需任何系统权限。因此存在被滥用可能,请大家不要因为此事联系我,谢谢。

2023年12月5日 06:35回复
cab

能提供一下思路吗,作者大大

2024年2月28日 08:08回复
大隐M-rk

像是借助蓝牙实现的功能?

感觉类似手表/carplay那种一样

2024年5月12日 21:10回复
秦瑞

有一个误区,需求是通过备用机读取主力机上的短信,其实并不需要通过短信转发,需要的是显示短信发送号码+短信内容,使用转发的方式需要消耗主力机的短信额度。可以将短信以文本方式存到云端,然后备用机读取即可。

2024年9月23日 12:21回复
尚未登陆
发布
  上一篇 (在MacOS Sonoma中安装RNDIS驱动的方法)
下一篇 (逆境会改变大脑)  

评论回复提醒