Mob 之 短信验证集成 SMSSDK
开相关发中总会遇到短信验证这些操作,这周没有来得及写新的东西,借此分享一篇以前学习短信验证的笔记,本文使用的是 Mob 提供的 SMSSDK .
下载 SMSSDK
官网下载地址:SMSSDK
集成 SMSSDK
将 MobCommons.jar、MobTools.jar、SMSSDK-2.0.1.aar、SMSSDKGUI-2.0.1.aar 放到了app 的 libs 目录下,如果不需要带界面的 SMSSDK 可以不添加 SMSSDKGUI-2.0.1.aar,具体文件请参考最新的 SMSSDK。
配置 build.gradle 文件
打开 app 下面的 build.gradle 文件进行如下配置:
配置AndroidManifest.xml
在 AndroidManifest.xml 文件中配置权限和Application.
配置权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
配置 application
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
启动 SDK
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
}
}
参考代码
实现一个简单的案例,获取验证码,并进行验证。
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.manu.sharesdksms.MainActivity">
<LinearLayout
android:id="@+id/ll_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:hint="手机号:" />
<EditText
android:id="@+id/et_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_getCheckCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="获取验证码"
android:clickable="true"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_pass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_user"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="验证码:"/>
<EditText
android:id="@+id/et_checkCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_sendCheckCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="验证"
android:clickable="true"/>
</LinearLayout>
</RelativeLayout>
MainActivity
/**
* ShareSDk 验证码测试
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText et_number;
private EditText et_checkCode;
private TextView tv_getCheckCode;
private TextView tv_sendCheckCode;
private String phoneNumber;
private String checkCode;
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_number = (EditText) findViewById(R.id.et_number);
et_checkCode = (EditText) findViewById(R.id.et_checkCode);
tv_getCheckCode = (TextView) findViewById(R.id.tv_getCheckCode);
tv_sendCheckCode = (TextView) findViewById(R.id.tv_sendCheckCode);
checkCode = et_checkCode.getText().toString().trim();
tv_getCheckCode.setOnClickListener(this);
tv_sendCheckCode.setOnClickListener(this);
//注册短信回调
SMSSDK.registerEventHandler(ev);
}
/**
* 短信验证的回调监听
*/
private EventHandler ev = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) { //回调完成
//提交验证码成功,如果验证成功会在data里返回数据。data数据类型为HashMap<number,code>
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
Log.e("TAG", "提交验证码成功" + data.toString());
HashMap<String, Object> mData = (HashMap<String, Object>) data;
String country = (String) mData.get("country");//返回的国家编号
String phone = (String) mData.get("phone");//返回用户注册的手机号
Log.e("TAG", country + "====" + phone);
if (phone.equals(phoneNumber)) {
runOnUiThread(new Runnable() {//更改ui的操作要放在主线程,实际可以发送hander
@Override
public void run() {
showDailog("恭喜你!通过验证");
dialog.dismiss();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
showDailog("验证失败");
dialog.dismiss();
}
});
}
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//获取验证码成功
Log.e("TAG", "获取验证码成功");
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {//返回支持发送验证码的国家列表
}
} else {
((Throwable) data).printStackTrace();
}
}
};
private void showDailog(String text) {
new AlertDialog.Builder(this)
.setTitle(text)
.setPositiveButton("确定", null)
.show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_getCheckCode:
toast("getCode");
getCheckCode();
break;
case R.id.tv_sendCheckCode:
toast("sendCode");
sendCheckCode();
break;
}
}
/**
* 获取验证码
*/
public void getCheckCode() {
phoneNumber = et_number.getText().toString().trim();
//发送短信,传入国家号和电话号码
if (TextUtils.isEmpty(phoneNumber)) {
toast("号码不能为空!");
} else {
SMSSDK.getVerificationCode("+86", phoneNumber);
toast("发送成功!");
}
}
/**
* 向服务器提交验证码,在监听回调中监听是否验证
*/
private void sendCheckCode() {
checkCode = et_checkCode.getText().toString();
if (!TextUtils.isEmpty(checkCode)) {
dialog = ProgressDialog.show(this, null, "正在验证...", false, true);
//提交短信验证码
SMSSDK.submitVerificationCode("+86", phoneNumber, checkCode);//国家号,手机号码,验证码
Toast.makeText(this, "提交了注册信息:" + phoneNumber, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "验证码不能为空", Toast.LENGTH_SHORT).show();
}
}
/**
* Toast
* @param info
*/
public void toast(String info){
Toast.makeText(MainActivity.this, info, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
SMSSDK.unregisterEventHandler(ev);
super.onDestroy();
}
}
测试效果
稍等一下,gif动画时间有点长,为了接收到短信哦!
可以选择关注微信公众号:jzman-blog 获取最新更新,一起交流学习!
Mob 之 短信验证集成 SMSSDK的更多相关文章
- Mob.com 短信验证的简单使用
1.环境配置 http://wiki.sharesdk.cn/android-短信sdk集成文档/ a.sdk下载 http://www.mob.com/#/downloadDetail/SMS/an ...
- 【mob】Android短信验证+源码
在很多的应用当中,都涉及到了短信验证的功能,比如在注册或者找回密码的时候,那么我们如何通过第三方的平台来完成这个功能呢? 本面博文就实现短信验证,来做一个小的栗子. 第一步-下载开发包 第二步-将SD ...
- Mob短信验证的具体使用
原文著作权地址:http://www.jb51.net/article/84946.htm demo地址:http://git.oschina.net/lizhanqi/MobSMSDemo 一.前言 ...
- 『实践』Android之短信验证码(用的Mob短信验证)
1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...
- Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自己主动填入功能结合实例)
用户注冊或者找回password时通常会用到短信验证功能.这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注冊用户.获取SD ...
- Mob短信验证的配置的解释
原文地址:http://www.jb51.net/article/84946.htm 关于mob短信验证的解释: mob官方是这样写的: repositories{ flatDir{ dirs 'li ...
- 完整的Android手机短信验证源码
短信验证功能我分两个模块来说,短信验证码的后台和代码实现短信验证码的功能. 一.短信验证码的后台 1.注册Mob账号:http://www.mob.com/#/login 2.注册成功之后, ...
- [android]ShareSDK——内容分享和短信验证
前言 新版本号ShareSDK的分享和短信验证,按官网的文档,都须要加入一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样.会冲突. 解决 ...
- android短信验证
短信验证demo http://download.csdn.net/detail/crazy1235/8315279#comment 使用MOB平台开发,用法详见: http://blog.csdn. ...
随机推荐
- VueX状态管理器 的应用
VueX状态管理器 cnpm i vuex axios -S 1 创建Vuex 仓库 import Vue from 'vue' import Vuex from 'vuex' vue.use(Vue ...
- Flutter 拖拽控件Draggable看这一篇就够了
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Draggable系列组件可以让我们拖动组件. Dragg ...
- 简述树,Trie,Avl,红黑树
树的表示方法 在平时工作中通常有2种方式来表示树状结构,分别是孩子链表示法和父节点表示法.光说名词可能无法让人联系到实际场景中,但是写出代码之后大家一定就明白了. 孩子链表示法,即将树中的每个结点的孩 ...
- 浅谈CSRF(跨站请求伪造)攻击方式
一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...
- Java中static和final的解析
static关键字和final关键字是Java中一个难点&重点.本文通过static的用途.常见问题.final的用途.final常见问题,以及static和final的对比来解释这两个关键字 ...
- Natas34 Writeup(闯关结束!)
Natas34: 登录什么都不用做,闯关结束!撒花~~~
- Dapper解析嵌套的多层实体类
在作项目的时候,我会将一些不涉及查询的字段,形成JSON统一存放在一个字段中,向下面这样的来建实体类, public class WechatModel { public string wechati ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之六(四十二)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 洛谷 P1891 疯狂LCM 题解
原题链接 享受推式子的乐趣吧 数论真有趣! 庆祝:数论紫题第 \(3\) 道. \[\sum_{i=1}^n \operatorname{lcm}(i,n) \] \[= \sum_{i=1}^n \ ...
- .NET Core使用NPOI导出复杂,美观的Excel详解
前言: 这段时间一直专注于数据报表的开发,当然涉及到相关报表的开发数据导出肯定是一个不可避免的问题啦.客户要求要导出优雅,美观的Excel文档格式的来展示数据,当时的第一想法就是使用NPOI开源库来做 ...