写在伊始
众所周知,登录注册界面实现短信自动回填是优化用户体验的重要手段,如果我们有RECEIVE_SMS权限,可以通过自定义BroadcastReceiver监听Action(com.google.android.gms.auth.api.phone.SMS_RETRIEVED)来实现短信自动回填功能。但是,RECEIVE_SMS是敏感权限,在很多国家,尤其你还是金融应用,是禁止获取这个权限的。那么,我们又如何实现这个短信自动回填功能呢?
今天的主角:Google SMSRetrieverAPI 解决了我们在无RECEIVE_SMS权限下实现短信自动回填功能的难题。怎么样,Google大人还是异常贴心的。但此种方式有一个美中不足之处,老铁们先看看是否可以接受!!!
美中不足
为了标识唯一应用。Google SMSRetrieverAPI 要求短信内容格式固定,必须在短信内容后添加用于标识应用的 11 个字符的哈希字符串,示例如下:
短信固定格式(#号可以不要,11位的sha256一定需要)
<#> Your ExampleApp code is: 123456
FA+9qCX9VVd
怎么样,短信尾部带个FA+9qCX9VVd(用户怎么看都不懂的玩意)。你的产品经理同意不哈哈。我成功说服了我们产品经理,此功能已上线。
当然,Google对短信内容和项目本身还有一些其他要求:
* 短信内容不能超过140个字节
* minSdkVersion 为 19 或更高
* compileSdkVersion 28 或更高版本
回归正题,开始实现此功能。
计算应用的哈希字符串
哈希字符串分为两种情况:
- 如果您在创建应用时选择的使用Google签名应用,那么我们需要使用deployment_cert.der文件来生成哈希字符串
- 如果您使用自己创建的签名keystore,那么我们直接使用您自己的签名文件来生成哈希字符串即可
我们分别来看一下这两种方式都如何生成哈希字符串
Google签名(deployment_cert.der)
生成步骤较为复杂,官网如下: