基于 GooglePlayService 的短信验证码自动填写

问题描述

如何才能不申请读取短信的权限,却又能够拿到自己发送的短信验证吗?

解决方案

在Google Play Service V2 中,谷歌提供了这样的方法。具体流程如下

  1. 获取用户电话号码
  2. 客户端启动SMS检索器(SmsRetrieverClient)
  3. 客户端将电话号码发送到您的服务器,请求下发验证码
  4. 服务端生成特定格式的短信发送给用户
  5. 手机收到短信后 GooglePlayService 使用 BroadcaseReceiver 发送给你应用
  6. 你从短信中提取 code,填写到验证码上

以上就是大体的流程。下面是官方的示意图

还有一个疑问需要解答,GooglePlayService 是怎么知道这个短信就是你的呢?
关键点在服务器生成的短信上,服务器生成的短信是类似于这样的

Your ExampleApp code is: 123ABC78


FA+9qCX9VSu

FA+9qCX9VSu 这个字符串是需要用你应用的 packagename 和 签名文件生成的,GooglePlayService 就是通过这种方式来识别这个验证码就是属于你这个应用的。(具体生成方法查看服务端参考文档)

参考

使用SMS Retriever API自动进行SMS验证
Android 端文档
服务器端文档