基于 GooglePlayService 的短信验证码自动填写
问题描述
如何才能不申请读取短信的权限,却又能够拿到自己发送的短信验证吗?
解决方案
在Google Play Service V2 中,谷歌提供了这样的方法。具体流程如下
- 获取用户电话号码
- 客户端启动SMS检索器(SmsRetrieverClient)
- 客户端将电话号码发送到您的服务器,请求下发验证码
- 服务端生成特定格式的短信发送给用户
- 手机收到短信后 GooglePlayService 使用 BroadcaseReceiver 发送给你应用
- 你从短信中提取 code,填写到验证码上
以上就是大体的流程。下面是官方的示意图

还有一个疑问需要解答,GooglePlayService 是怎么知道这个短信就是你的呢?
关键点在服务器生成的短信上,服务器生成的短信是类似于这样的
Your ExampleApp code is: 123ABC78
FA+9qCX9VSu
FA+9qCX9VSu
这个字符串是需要用你应用的 packagename
和 签名文件生成的,GooglePlayService 就是通过这种方式来识别这个验证码就是属于你这个应用的。(具体生成方法查看服务端参考文档)