如何实现Ionic/Angular应用关闭时读取指定号码短信并对接API?
解决方案:Android/iOS 关闭状态下接收指定号码短信
Android 平台实现方式
1. 静态注册广播接收器
Android 支持通过静态注册 SMS_RECEIVED_ACTION 广播接收器,在应用关闭甚至进程被杀的情况下接收短信广播。具体操作:
- 在
AndroidManifest.xml中声明READ_SMS、RECEIVE_SMS权限,同时注册广播接收器并指定接收android.provider.Telephony.SMS_RECEIVED动作。 - 在广播接收器的
onReceive方法中解析短信内容,筛选出指定号码的消息。 - 由于广播接收器生命周期极短,禁止直接执行耗时的网络请求,建议调用
WorkManager发起一次性后台任务,将短信内容通过 REST API 发送至服务器。WorkManager可保证任务在合适时机执行,即便进程重启也不受影响。
2. 注意事项
- Android 13 及以上版本需额外申请
POST_NOTIFICATIONS权限,用于后续给用户推送通知。 - 部分国产 ROM 对后台广播有额外限制,需引导用户为应用开启「自启动」「后台运行」权限。
iOS 平台实现方式
iOS 对第三方应用后台权限限制严格,应用关闭时接收短信只能通过 SMS Filter Extension:
- 创建 SMS Filter Extension 目标,该扩展独立于主应用运行,可拦截系统收到的所有短信。
- 在扩展的
SMSFilterManager实现中,过滤指定号码的短信并将内容通过 API 发送至服务器。 - 需引导用户在系统设置的「信息」-「未知与过滤信息」中,将你的应用设为过滤应用,扩展才能生效。
- 扩展运行资源有限,网络请求需尽量轻量化,避免超时。
替代方案
1. 短信转发到服务器号码
引导用户在系统短信应用中设置「指定号码短信转发」,将目标号码的短信转发至绑定服务器的手机号。服务器接收短信后完成内容处理,再通过推送通知告知用户。此方案无需应用后台运行,兼容性强,但需要用户完成转发设置。
2. Android 辅助功能监听(备选)
通过 Accessibility Service 监听短信应用的通知栏消息,解析通知中的短信内容。但该方案依赖短信应用的通知格式,稳定性较差,且需要用户授予辅助功能权限,仅作为兜底方案。
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

