程序员

如何让我的应用自动填写短信验证码?

作者:admin 2021-07-21 我要评论

问题分享 华为开发者论坛 上有开发者向我们咨询想要实现应用自动填写短信验证码但如果将手机短信验证码保护功能打开app就不能自动填写验证码有没有什么方法能获...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

问题分享

华为开发者论坛上有开发者向我们咨询:想要实现应用自动填写短信验证码,但如果将手机短信"验证码保护"功能打开,app就不能自动填写验证码,有没有什么方法能获取到短信验证码?问题链接:

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202342491084740374&fid=18?ha_source=hms1

1

?

我们知道,华为对隐私保护高度重视,用户的隐私安全一直是华为的首要关注。为了保护用户的支付安全和帐号安全,华为EMUI系统提供了验证码短信的保护功能,该功能可以阻止第三方应用获取用户收到的验证码短信。那么正如开发者提问的那样,开启短信验证码保护后app不能自动填写验证码,华为有没有提供什么方法在开启短信验证码保护的状态下,仍然可以自动获取到验证码并自动填写的呢?

解决方案

华为帐号服务(HUAWEI Account Kit)为开发者提供了一项短信自动读取能力,可以帮助应用自动读取验证码,实现应用自动或者被授权读取短信验证码,提高验证效率,优化用户体验。

1

以下是短信自动读取能力的一种场景:

如果应用需要用户输入手机号并通过短信验证码核实用户身份,可以通过集成ReadSmsManager服务,使应用在无需申请短信读取权限的前提下,具备自动读取针对该应用的短信验证码的能力。用户在验证过程中可以省去手动输入短信验证码的操作,整个获取短信验证码的流程可简化成:用户点击获取验证码→收到短信→自动填充→用户点击,将会更加优化用户体验。

自动读取短信验证码功能关键开发操作指导

1.应用调用ReadSmsManager.start(Activity activity)方法请求开启短信读取服务。

Task<Void> task = ReadSmsManager.start(MainActivity.this);
task.addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(Task<Void> task) {
        if (task.isSuccessful()) {
            // 开启服务成功,可以继续后续流程
            doSomethingWhenTaskSuccess();
        }
    }
});

2.?应用客户端将手机号发送给应用服务器,应用服务器生成一条验证消息,并通过SMS将其发送到用户的手机号。此部分由开发者自行完成。

3.?当用户的设备接收到验证消息时,HMS Core(APK)会显式地向应用客户端发送广播,intent里面包含消息的文本。应用客户端可以使用广播接收此验证消息。应用客户端读取到验证消息的文本后,可以使用正则表达式或其他逻辑从消息中获得验证码,验证码的格式由应用客户端和服务器自行定义。

public class MySMSBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null && ReadSmsConstant.READ_SMS_BROADCAST_ACTION.equals(intent.getAction())) {
            Status status = bundle.getParcelable(ReadSmsConstant.EXTRA_STATUS);
            if (status.getStatusCode() == CommonStatusCodes.TIMEOUT) {
                // 服务已经超时,未读取到符合要求的短信,服务关闭
                doSomethingWhenTimeOut();
            } else if (status.getStatusCode() == CommonStatusCodes.SUCCESS) {
                if (bundle.containsKey(ReadSmsConstant.EXTRA_SMS_MESSAGE)) {
                    // 服务读取到了符合要求的短信,服务关闭
                    doSomethingWhenGetMessage(bundle.getString(ReadSmsConstant.EXTRA_SMS_MESSAGE));
                }
            }
        }
    }
}

除了以上自动读取短信验证码能力以外,华为帐号服务还提供了授权读取短信验证码的能力,使应用在无需申请短信读取权限的前提下,可以通过用户授权方式来自动获取针对应用的短信验证码。用户在验证过程中可以省去手动输入短信验证码的操作,优化用户体验。

3

欲了解更多详情,请参阅:

>>华为账号服务官网

>>自动读取短信验证码开发指导文档

>>授权读取短信验证码开发指导文档

华为账号服务开源仓库地址:GitHubGitee

>>访问华为开发者联盟官网,了解更多相关内容

>>获取开发指导文档

>>华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解华为移动服务最新技术资讯~

?

;原文链接:https://blog.csdn.net/HUAWEI_HMSCore/article/details/115763355

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 数智洞察丨和死神赛跑,那些不得不“闯

    数智洞察丨和死神赛跑,那些不得不“闯

  • 酒店小程序开发瑞蚁解决方案

    酒店小程序开发瑞蚁解决方案

  • 自建Kubernetes集群如何使用阿里云CSI

    自建Kubernetes集群如何使用阿里云CSI

  • 【kafka运维】数据迁移、分区副本重分

    【kafka运维】数据迁移、分区副本重分

腾讯云代理商
海外云服务器