Android O中对于短信验证无需请求权限

Android O 针对SMS(短信)认证的方式进行了改进,引入了专门的API。应用程序可以使用它们来检索应用程序通过SMS(短信)发出去的验证码,因此,Android O中的应用程序请求SMS将不再需要权限

定义

短信验证也被称为”短信认证“,是为了验证用户的合法性。现在国内很多应用都使用了手机验证码作为注册、登录的首选方式,其次就是使用邮箱和第三方的方式。

原理

当一部Android设备输入了手机号码,发出了请求验证码操作,后台服务器就会向客户端发送包含密码字串的短信,然后客户端输入该字串,发送到服务器进行验证。如果成功通过了服务器的验证,客户端就成功的完成了短信验证,进入到指定的功能界面。

现状

客户端接收到服务器下发的短信,主要有两种可能的解决方案来管理短信

  • 方式1: 用户收到了服务器下发到客户端的验证码短信,收到后手动输入或复制粘贴到正确的位置
  • 方式2: 开发者通过代码让程序读取用户最近收到的短信,并找到该应用程序的相应消息,自动填充到正确的位置

缺点

  • 从Android M开始需要额外的添加android.permission.READ_SMS权限请求
  • 应用程序必须搜索相应的短信
  • 一旦授予了读取短信的权限,应用程序就能控制整个短信的阅读权限,有可能追踪到用户的敏感性短信内容
  • 其他应用程序也能够获取到开发者自己应用的短信内容
  • 用户或许不是真实的

改进

Android O 在SmsManager中引入了新的API——createAppSpecificSmsToken()

createAppSpecificSmsToken

参数: intent (PendingIntent)
返回值: String类型 (令牌包含在短信中。 令牌将是11个字符长)

  • 1、后台服务器生成一个token(令牌),并将其发送给Android客户端
  • 2、Android 客户端通过利用createAppSpecificSmsToken() API 接收token信息
  • 3、一旦收到信息,在没有任何权限的情况下,获得一个回调到PendingIntent

这意味着不需要手动输入验证码或token令牌值进入,甚至没有必要有通过读取短信来自动检测代码这个过程。有了这个新的API,我们可以直接得到我们的应用程序的回调。

“”Create a single use app specific incoming SMS request for the the calling package. This method returns a token that if included in a subsequent incoming SMS message will cause intent to be sent with the SMS data. The token is only good for one use, after an SMS has been received containing the token all subsequent SMS messages with the token will be routed as normal. An app can only have one request at a time, if the app already has a request pending it will be replaced with a new request. “”

为呼叫包创建一个单一的应用程序特定的传入请求短信。这个方法返回一个token,如果包含在后续传入的短信中,将会导致短信数据意图被发送。这个token仅适合一次使用,在收到一条包含了token的短信后,token的所有后续SMS短信消息将正常路由。一个应用程序一次只能有一个请求,如果这个应用程序已经有了一个请求等待,它将被替换为一个新的请求。

优点

使用此API最大的好处是不需要任何READ_SMS权限。此外,消息的内容也将直接发送到我们应用程序的意图中。该方法的另一个积极点是短信将不再显示在消息历史中,这特别提高了用户数据的安全性,因为没有其他应用程序将能够读取内容。

结语

应用程序请求SMS将不再需要权限,这实际上是Android O中一个很不错的功能,很高兴看到Google继续添加这样的功能。大家觉得如何呢?

if (本文对您有用) { Pay (请随意¥打赏) } else { Commit feedback (底部评论区提交建议、反馈) } 感谢支持!