美文网首页
Android短信验证再研究

Android短信验证再研究

作者: 奔跑的佩恩 | 来源:发表于2021-06-08 09:43 被阅读0次

    前言

    Android开发过程中,短信验证是一个十分重要的功能点,在之前的文章我已经讲过了
    Android自动发送邮件详解
    Android上实现短信验证
    因为距之前写的短信验证文章已经很久,j鉴于起相关使用的调用发生一些变化。那么这篇文章,让我们对Android短信验证再进行一次讲解。

    今天涉及内容有:

    1. 前期准备
      1.1 创建应用
      1.2 短信费率
    2. 添加依赖
    3. 一些相关类
    4. 短信验证封装类MobSMS方法简介
    5. MobSMS在Activity中使用
    6. 效果图和项目结果图
    7. MobSMS源码

    先来波效果图


    效果图.gif

    一. 前期准备

    1.1 创建应用

    这里实现短信验证使用的是 mob官网 的短信验证功能。首先我们要在mob官网 上注册账号。注册完成以后,登录进去后点击又上角的 产品管理 ----> 点击开发者平台的 立即进入,如下图

    image.png
    进入新界面后,点击创建应用,如下图
    image.png
    然后依据步骤一步步创建应用,会生成应用的 App KeyApp Secret,接着选择添加短信验证功能。在你创建的应用中又各种设置,可以设置短信的位数 和 发送时间间隔等。这些在 Android上实现短信验证 已经做过详细介绍,此文的操作与此变化不大,这里就不再赘述。
    默认发送的短信验证码信息为:【掌淘科技】“应用名称”的验证码为:xxxxxx
    1.2 短信费率

    一般用户可以免费发送短信 一万条/月。如果用量较大,则需要在 mob账号上充值。收费如下图

    短信费率.png

    二. 添加依赖

    我们接入的mob 的短信模块功能叫 SSMSDK下。
    在你的 project对应的builg.gradle中添加以下依赖:

    buildscript {
        repositories {
            // 配置Mob Maven库
            maven {
               url "https://mvn.mob.com/android"
            }
        }
        dependencies {
            classpath "com.mob.sdk:MobSDK:2018.0319.1724"
        }
    }
    

    app_module对应的builg.gradle中添加以下依赖:

    // 添加插件
    apply plugin: 'com.mob.sdk'
    
    // 在MobSDK的扩展中注册SMSSDK的相关信息
    MobSDK {
        appKey "替换为mob官方申请的appkey"
        appSecret "替换为mob官方申请的appkey对应的appSecret"
        spEdition "fp" // 设定MobSDK为隐私协议适配版本
        SMSSDK {}
    }
    

    项目中会使用到json解析,这里我使用的是gson解析,所以你还要在app_module对应的builg.gradle中添加以下依赖:

    dependencies {
        //gson
        implementation 'com.google.code.gson:gson:2.8.5'
    }
    

    为了遵守app使用规范,你需要在你项目的《隐私协议》中追加以下信息:
    我们使用了第三方(上海游昆信息技术有限公司,以下称“MobTech”)MobTech SMSSDK服务为您提供短信验证功能。为了顺利实现该功能,您需要授权MobTechSDK提供对应的服务;在您授权后,MobTech将收集您相关的个人信息。关于MobTech所收集的信息种类、用途、个人信息保护的规则及退出机制等,详见MobTech官网([www.mob.com](http://www.mob.com/?fileGuid=rp3OVEB0p9TGaYAm))上的隐私政策 ([www.mob.com/about/policy](http://www.mob.com/about/policy?fileGuid=rp3OVEB0p9TGaYAm))条款。

    三. 一些相关类

    mobSMSSDK功能我已经封装到了工具类MobSMS,为了协助其使用,这里还涉及到两个数据类:

    • SmsError: 短信验证错误的data
    • ZoneData : 国家代码

    下面给出 SmsError 代码:

    package com.testdemo;
    
    import java.io.Serializable;
    
    /**
     * Title: 短信验证错误的data
     * description:
     * autor:pei
     * created on 2021/6/7
     */
    public class SmsError implements Serializable {
    
        private int httpStatus;
        private String description;
        private String detail;
        private String error;
        private int status;
    
        public int getHttpStatus() {
            return httpStatus;
        }
    
        public void setHttpStatus(int httpStatus) {
            this.httpStatus = httpStatus;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public String getDetail() {
            return detail;
        }
    
        public void setDetail(String detail) {
            this.detail = detail;
        }
    
        public String getError() {
            return error;
        }
    
        public void setError(String error) {
            this.error = error;
        }
    
        public int getStatus() {
            return status;
        }
    
        public void setStatus(int status) {
            this.status = status;
        }
    }
    

    然后是 ZoneData 代码:

    package com.testdemo;
    
    import java.io.Serializable;
    
    /**
     * Title: 国家代码
     * description:
     * autor:pei
     * created on 2021/6/7
     */
    public class ZoneData implements Serializable {
    
        private String zone;
        private String rule;
    
        public String getZone() {
            return zone;
        }
    
        public void setZone(String zone) {
            this.zone = zone;
        }
    
        public String getRule() {
            return rule;
        }
    
        public void setRule(String rule) {
            this.rule = rule;
        }
    }
    

    四. 短信验证封装类MobSMS方法简介

    准备工作结束后,让我们来看看短信验证封装类MobSMS中的一些主要方法:

        //注册短信回调
        public void register(MobSMSListener listener)
    
        /***
         * 提交隐私协议
         *
         * 注:在点击同意用户协议时调用
         */
        public void submitPolicy()
    
        /**获取支持的国家代码列表**/
        public void getSupportedCountries()
    
        /***
         * 请求验证码
         *
         * @param country: 国家代码,如“86”
         * @param phone:手机号码,如“13800138000”
         */
        public void getVerifyCode(String country, String phone)
    
        /***
         * 请求语音验证码
         *
         * @param country: 国家代码,如“86”
         * @param phone:手机号码,如“13800138000”
         */
        public void getVoiceVerifyCode(String country, String phone)
    
        /***
         * 提交验证码
         *
         * @param country: 国家代码,如“86”
         * @param phone: 手机号码,如“13800138000”
         * @param code: 验证码,4位或6位的字符串
         */
        public void submitVerifyCode(String country, String phone, String code) 
    
       /**注销短信监听**/
        public void unRegister() 
    

    五. MobSMS在Activity中使用

    下面贴出MobSMSActivity中使用代码:

    public class TempActivity extends AppCompatActivity implements View.OnClickListener{
    
        private TextView mTvTest;
        private Button mBtnTest;
        private Button mBtnTest1;
        private Button mBtnTest2;
        private Button mBtnTest3;
        private Button mBtnTest4;
    
        private MobSMS mobSMS;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_temp);
    
            //初始化控件
            initView();
            //初始化数据
            initData();
            //控件监听
            setListener();
        }
    
        /**
         * 初始化控件
         **/
        private void initView() {
            mTvTest = findViewById(R.id.mTvTest);
            mBtnTest = findViewById(R.id.mBtnTest);
            mBtnTest1 = findViewById(R.id.mBtnTest1);
            mBtnTest2 = findViewById(R.id.mBtnTest2);
            mBtnTest3 = findViewById(R.id.mBtnTest3);
            mBtnTest4 = findViewById(R.id.mBtnTest4);
        }
    
        private void initData() {
            mTvTest.setText("我是测试啊");
    
            mobSMS=new MobSMS();
        }
    
        /**
         * 控件监听
         **/
        private void setListener() {
            //点击事件
            mBtnTest.setOnClickListener(this);
            mBtnTest1.setOnClickListener(this);
            mBtnTest2.setOnClickListener(this);
            mBtnTest3.setOnClickListener(this);
            mBtnTest4.setOnClickListener(this);
    
            //注册
            mobSMS.register(new MobSMS.MobSMSListener() {
    
                @Override
                public void getSupportCounties(List<ZoneData> list) {
                    LogUtil.i("=====获取国家代码列表成功=====");
                    for(ZoneData bean:list){
                        LogUtil.i("======code="+bean.getZone()+"  rule="+bean.getRule());
                    }
                }
    
                @Override
                public void getVerifySuccess() {
                    LogUtil.i("=====获取验证短信成功=====");
                    ToastUtil.shortShow("获取验证短信成功");
                }
    
                @Override
                public void getVoiceVerifySuccess() {
                    LogUtil.i("=====获取语音验证短信成功=====");
                    ToastUtil.shortShow("获取语音验证短信成功");
                }
    
                @Override
                public void submitVerifySuccess() {
                    LogUtil.i("=====提交验证码成功=====");
                    ToastUtil.shortShow("提交验证码成功");
                }
    
                @Override
                public void verifyFailed(String message) {
                    LogUtil.i("=====验证短信相关功能失败: message="+message);
                    ToastUtil.shortShow(message);
                }
            });
    
        }
    
        @Override
        public void onClick(View v) {
             switch (v.getId()) {
                 case R.id.mBtnTest:
                     LogUtil.i("======隐私协议======");
    
                     //提交隐私协议
                     mobSMS.submitPolicy();
                     LogUtil.i("========同意隐私协议=========");
    
                     break;
                 case R.id.mBtnTest1:
                     LogUtil.i("======请求验证码======");
    
                     // 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”
                     mobSMS.getVerifyCode("86", "1895432113");
                     break;
                 case R.id.mBtnTest2:
                     LogUtil.i("======请求语音验证码======");
                     mobSMS.getVoiceVerifyCode("86", "1895432113");
                     break;
                 case R.id.mBtnTest3:
                     LogUtil.i("======获取国家代码======");
                     mobSMS.getSupportedCountries();
                     break;
                 case R.id.mBtnTest4:
                     LogUtil.i("======提交验证码======");
                     mobSMS.submitVerifyCode("86", "1895432113","1357");
                     break;
                 default:
                     break;
             }
        }
    
        private void test(){
    
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
    
            //注销短信监听
            if(mobSMS!=null){
                mobSMS.unRegister();
            }
        }
    }
    

    六. 效果图和项目结果图

    效果图.gif 项目结构图.png

    七. MobSMS源码

    MobSMS源码如下:

    相关文章

      网友评论

          本文标题:Android短信验证再研究

          本文链接:https://www.haomeiwen.com/subject/fdjdeltx.html