Android短信验证再研究
前言
在Android
开发过程中,短信验证是一个十分重要的功能点,在之前的文章我已经讲过了
Android自动发送邮件详解
Android上实现短信验证
因为距之前写的短信验证文章已经很久,j鉴于起相关使用的调用发生一些变化。那么这篇文章,让我们对Android短信验证
再进行一次讲解。
今天涉及内容有:
- 前期准备
1.1 创建应用
1.2 短信费率 - 添加依赖
- 一些相关类
- 短信验证封装类MobSMS方法简介
- MobSMS在Activity中使用
- 效果图和项目结果图
- MobSMS源码
先来波效果图
效果图.gif
一. 前期准备
1.1 创建应用
这里实现短信验证使用的是 mob官网 的短信验证功能。首先我们要在mob官网 上注册账号。注册完成以后,登录进去后点击又上角的 产品管理
----> 点击开发者平台的 立即进入
,如下图
进入新界面后,点击
创建应用
,如下图image.png
然后依据步骤一步步创建应用,会生成应用的
App Key
和 App Secret
,接着选择添加短信验证
功能。在你创建的应用中又各种设置,可以设置短信的位数 和 发送时间间隔等。这些在 Android上实现短信验证 已经做过详细介绍,此文的操作与此变化不大,这里就不再赘述。默认发送的短信验证码信息为:
【掌淘科技】“应用名称”的验证码为:xxxxxx
1.2 短信费率
一般用户可以免费发送短信 一万条/月
。如果用量较大,则需要在 mob
账号上充值。收费如下图
二. 添加依赖
我们接入的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))条款。
三. 一些相关类
mob
的SMSSDK
功能我已经封装到了工具类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中使用
下面贴出MobSMS
在Activity
中使用代码:
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
源码如下: