移动设备上的验证码自动填充
Google官方app都可以到。我想大概率不是单独的权限。后来发现signal登录的时候,获取到短信验证码会自动填充。这样的场景和APP还有很多。以下是如何实现的方案。
Android端
Android有两种方案不申请短信权限获取验证码。
一、SMS Retriever API 机制
- 生成特征码: App应用会向 Google Play 服务请求一个属于它自己的唯一样式哈希字符串(通常是 11 个随机字符
FAp49keObki)。 - 发送带有这个随机字符的短信,随机字符需要放在末尾,例如:
>[APP NAME] Your verification code is: 123456. FAp49keObki` - Google Play 服务会扫描这条短信。当系统看到末尾的
FAp49keObki时,立刻就知道这是你的APP的验证码 - 投递给APP,APP处理验证码内容。
在这个过程中,APP 从头到尾都拿不到短信读写权限,它只能通过系统被动接收那一条属于它自己的验证码短信。
二、SMS User Consent API
其实Android预留了“获取短信验证码”的权限。目前广为人知的获取这个权限的APP是QQ。你可以在接收到短信验证码的时候看到这样的权限提示。
“_允许 QQ 读取这条验证码吗?_”
你点击允许后,系统才会把这一条短信的内容共享给 QQ。这同样不需要应用在后台拥有长期的 READ_SMS 权限,属于单次临时授权。
iOS的自动填充
iOS似乎获取不到这个权限,但是十年前的iOS版本开始会优化验证码短信,直接显示在键盘顶部提示快捷输入。不过apple的系统APP似乎可以获取到。
WEB页面的自动填充
当你在web端申请获取验证码时,如果你的短信中包含了@根域名 这样的字符,你的短信会被系统识别为验证码短信,同样会触发快捷输入。iOS和Android目前均支持该操作。例如
Your QQ login code is 123456
@qq.com #123456这样在QQ根域的页面,收到这条短信时,就会触发自动填充操作。
标签:短信验证码自动填充, Android 免短信权限, SMS Retriever API, SMS User Consent API, 网页验证码快捷输入, iOS 短信自动填充