[Feature Request]MIUI14 读取验证码后移除短信通知
现在勾选 设置短信为已读 在MIUI14失效 以前有这个模块误把我普通短信当成验证码短信,因为我勾选了提取后删除短信,导致我死活看不到那条普通短信的信息以为没收到,所以删除短信那个选项虽然可用,但是一旦误删除就很耽误事,不敢开
@jiang-yuan 短信为已读,这个功能基本上失灵了。因为是不是已读的状态,很大程度上取决于短信App有没有自己的逻辑在里面,如果有,那就没办法生效。
@jiang-yuan 短信为已读,这个功能基本上失灵了。因为是不是已读的状态,很大程度上取决于短信App有没有自己的逻辑在里面,如果有,那就没办法生效。
其实不用标记为已读,可以自动把短信通知删除就行了,这个不难实现把?
@jiang-yuan 要知道你说的 “短信通知”,其实是 “短信App发出来的通知”,如果要去掉 “短信App发出来的通知”,有两种思路。
- Hook 系统的短信App,配合识别到的验证码逻辑,实现 不发出通知 或者 取消发出的通知 。这个方案不现实,因为现在各厂商都是自己的短信App,也就是需要适配各种机型的各种版本的系统短信App,难度大,效果差。
- Hook 系统的通知服务,在生成系统通知前进行过滤,如果识别到验证码就不生成通知 或者 不展示通知。这个方案也有问题:
- 过滤通知的方式只能是文本匹配,(系统短信App收到验证码之后,会展示怎样的通知,通知里面的内容是什么,这些都不确定,各厂商行为也不一致)识别率应该不高,可能会造成 不该展示的展示了 或者 该展示的没展示
- 影响面广,所有的通知展示前都会走这一层逻辑,可能会一定程度影响系统效率
综合来看,这两种方案都不是特别好,所以也没做这个功能。
那现在提取提取验证码本身不就是hook了通知吗?在已经hook的通知上多做一个清除通知的操作应该还行吧,毕竟这个是用户自己开关的功能,用户自己可以权衡。这个也不像直接删除短信那么极端,起码在收件箱还能找到。
@jiang-yuan 并没有 Hook 系统的通知服务。每个App在运行期间有能力发出属于自己的通知,Hook 的是名为 “电话服务” 的进程(App),所以此模块可以让 电话服务 进程发出验证码短信通通知。所以用户看到的就是 “电话服务” 这个App 发出了通知。
那删除短信的功能生效是不是说明其实是有hook短信app的
@jiang-yuan 嗯,也不一样。可以想象一下,如果你用了一个第三方的短信App替代了原有的系统默认的短信App,那还是会收到短信的。也就是说,短信的接受流程实际上是在系统服务里面的,这个服务所在的进程就是 “电话服务” 进程。
“电话服务” 进程会对系统的短信收发过程做处理,举个栗子,收到短信之后, “电话服务” 进程会发送 “收到短信” 这个广播,短信类的App注册了这个广播,就可以收到这条广播消息,从而显示出来自己的通知。
所以删除短信的功能,应该从上游 “电话服务” 里面hook,而不是在下游的短信app里面
所以,你也能看到此模块需要hook的app里面不包含短信app
既然 “删除短信功能” 是在上游的 “电话服务” 进程里面做的,那为什么 “标记为已读” 没办法在 “电话服务” 里面做呢?
实际上 “标记为已读” 就是让 “电话服务” 把短信标记为已读。但是,各厂商的系统短信App里面自己有一套自己的标记为已读的逻辑,所以上游影响不到下游。
而如果在上游删除了短信,不再发送 “收到短信” 的广播,下游根本收不到 “收到短信” 的广播,那下游自然也不会有任何反应了。
嗯,感谢详细解释 看来得多hook一个短信开销有点不划算 但是我现在用的pushbullet只用给它读取通知权限,它可以清除别的app的通知比如微信的,也不用别的权限或者hook
@jiang-yuan 要知道你说的 “短信通知”,其实是 “短信App发出来的通知”,如果要去掉 “短信App发出来的通知”,有两种思路。
Hook 系统的短信App,配合识别到的验证码逻辑,实现 不发出通知 或者 取消发出的通知 。这个方案不现实,因为现在各厂商都是自己的短信App,也就是需要适配各种机型的各种版本的系统短信App,难度大,效果差。
Hook 系统的通知服务,在生成系统通知前进行过滤,如果识别到验证码就不生成通知 或者 不展示通知。这个方案也有问题:
- 过滤通知的方式只能是文本匹配,(系统短信App收到验证码之后,会展示怎样的通知,通知里面的内容是什么,这些都不确定,各厂商行为也不一致)识别率应该不高,可能会造成 不该展示的展示了 或者 该展示的没展示
- 影响面广,所有的通知展示前都会走这一层逻辑,可能会一定程度影响系统效率
综合来看,这两种方案都不是特别好,所以也没做这个功能。
第二种方法挺好的,是否在生成系统通知前进行过滤其实不重要,可以在检测到电话服务有验证码之后再进行通知过滤,这样应该不怎么影响系统效率。过滤方式可以直接拿电话服务提取到的验证码进行匹配,或者和现有的验证码匹配规则保持一致也基本能适应大多数情况。 读取验证码后消除通知比起拦截和删除短信更有容错空间
对,其实就没必要删除通知 pushbullet这个软件根本不需要root或者hook,它能在pc端展示手机通知,在pc端点击'清除'以后就能把手机端的通知也自动划掉,我不知道它利用的是啥机制,但是被提醒的app内部的通知还是保留的,只是通知栏不显示了