Android短信验证再研究

2021-06-08  本文已影响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 代码:

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源码如下:

上一篇下一篇

猜你喜欢

热点阅读