自定义MOB短信验证登录
今天给大家分享一个自定义的mob短信验证,别的废话就不多说了,看步骤。
首先也是打开mob的第三方平台,下载sdk。
一、说明
(1)3.x与之前的旧版本互不兼容,请严格按照本文档进行3.x的首次集成或老版本的升级操作。
(2)3.x之前版本的集成,请参考:Android 短信SDK集成文档
–>集成之前先要申请Mob的appkey与appsecret,点这里提供了申请介绍;申请完添加短信SDK的产品;得到key我们开始集
二、获取SDK
请至Mob官网下载最新SDK,解压后会看到以下目录结构:
如果是用的Studio就下载Studio的SDK,如果用的是Eclipse就下载Eclipse的Sdk,接下来我要介绍的是Studio的集成。
下载完之后呢,把SMSSDK文件下的架包放到工程libs添加以下
SMSSDK下存放的是短信SDK的全部内容。
三、导入SDK
1.
将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面:
四、添加代码
1.配置AndroidManifest.xml
1.1、添加以下权限:
<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" />1.2添加以下Activity:
<activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize"/>
1.3、在Application节点下添加以下属性:
android:name="com.mob.MobApplication"1.4、在Application节点下添加以下meta-data:
<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data --> <meta-data android:name="Mob-AppKey" android:value="你的AppKey"/> <meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>最终,你的AndroidManifest.xml看起来应该像这样:
以上呢把该配置的东西配置完了就该上代码了
首先在activity_main.xml里写布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:gravity="center"
android:orientation="vertical">
<EditText
android:id="@+id/userName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:hint="请输入手机号"
android:layout_gravity="center_vertical"
android:singleLine="true"
android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<EditText
android:id="@+id/validateNum"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:padding="10dp"
android:hint="验证码"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dp"
android:singleLine="true"
android:textSize="16sp" />
<Button
android:id="@+id/validateNum_btn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="获取验证码"/>
</LinearLayout>
<Button
android:id="@+id/landing_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="登录"/>
</LinearLayout>
然后就是在MainActivity里写代码了:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button validateNum_btn;
private Button landing_btn;
private EditText userName;
private EditText validateNum;
public EventHandler eh; //事件接收器
private TimeCount mTimeCount;//计时器
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initEvent();
init();
}
private void initEvent(){
userName = (EditText) findViewById(R.id.userName);
validateNum = (EditText) findViewById(R.id.validateNum);
validateNum_btn = (Button) findViewById(R.id.validateNum_btn);
landing_btn = (Button) findViewById(R.id.landing_btn);
validateNum_btn.setOnClickListener(this);
landing_btn.setOnClickListener(this);
mTimeCount = new TimeCount(60000, 1000);
}
/**
* 初始化事件接收器
*/
private void init(){
eh = new EventHandler(){
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) { //回调完成
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码成功
startActivity(new Intent(MainActivity.this, SecondActivity.class)); //页面跳转
}else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //获取验证码成功
}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持发送验证码的国家列表
}
}else{
((Throwable)data).printStackTrace();
}
}
};
SMSSDK.registerEventHandler(eh); //注册短信回调
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.validateNum_btn:
// SMSSDK.getSupportedCountries();//获取短信目前支持的国家列表
if(!userName.getText().toString().trim().equals("")){
if (checkTel(userName.getText().toString().trim())) {
SMSSDK.getVerificationCode("+86",userName.getText().toString());//获取验证码
mTimeCount.start();
}else{
Toast.makeText(MainActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(MainActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show();
}
break;
case R.id.landing_btn:
if (!userName.getText().toString().trim().equals("")) {
if (checkTel(userName.getText().toString().trim())) {
if (!validateNum.getText().toString().trim().equals("")) {
SMSSDK.submitVerificationCode("+86",userName.getText().toString().trim(),validateNum.getText().toString().trim());//提交验证
}else{
Toast.makeText(MainActivity.this, "请输入验证码", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(MainActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(MainActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show();
}
break;
}
}
/**
* 正则匹配手机号码
* @param tel
* @return
*/
public boolean checkTel(String tel){
Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
Matcher matcher = p.matcher(tel);
return matcher.matches();
}
@Override
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(eh);
}
/**
* 计时器
*/
class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long l) {
validateNum_btn.setClickable(false);
validateNum_btn.setText(l/1000 + "秒后重新获取");
}
@Override
public void onFinish() {
validateNum_btn.setClickable(true);
validateNum_btn.setText("获取验证码");
}
}
}
这里还要创建一个SecondActivity当填写完验证码之后,点击登录按钮跳转到第二个页面
最后让大家看看效果
源码请看:https://github.com/YSGuang/Mob_demo.git