1,获取App Key和App Secret和SMSSDK包。
(1)进入Mob官网注册账号,并登录。


2,点击添加应用,创建新应用,


创建完成后,就能看到AppKey和AppSecret。(应用里会用到)

点击左边SMSSDK加号按钮,添加SMSSDK。(带加号的功能需要哪些添加哪些)
注意:点开SMSSDK功能,点击短信设置,关闭是否开启Mob云验证(官网默认是打开的),否则只会给手机发送一次验证码,往后就自动验证,不会发送验证码,

进入官网下载中心,下载SMSSDK包

选择获取离线SDK。

将下载好的压缩文件解压。
![]()
打开文件,进入目录,sms--SMSSDK--SMSSDK--libs,找到如下图四个压缩文件

2,在AndroidStudio中配置Mob环境。
将上图SMDSDK--libs目录下的四个压缩文件复制到AndroidStudio项目的libs目录下

在repositories里添加如下图红框里的代码。

在AndroidManifest.xml添加权限:

在Application节点下添加以下红框内代码
:
新建BaseActivity,在BaseActivity下新建BaseApplication,(要在BaseApplication里初始化Mob)

添加以下Activity:

在BaseApplication里初始化Mob:AppKey和AppSecret是在mob上申请的。

mob配置完成。
3,配置第三方数据库框架LitePal:
4,主要代码:
注册:
package com.example.cindy.register;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.cindy.register.data.RegisterBean;
import com.example.cindy.register.utils.SharePreferenceUtil;
import com.example.cindy.register.utils.TextUtil;
import org.litepal.LitePal;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import static com.example.cindy.register.utils.TextUtil.checkTel;
import static com.example.cindy.register.utils.TextUtil.matchAccount;
import static com.example.cindy.register.utils.TextUtil.verifyStoragePermissions;
public class RegisterActivity extends AppCompatActivity {
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.edit_phone)
EditText editPhone;
@BindView(R.id.btn_register)
Button btnRegister;
@BindView(R.id.textView6)
TextView textView6;
@BindView(R.id.textView7)
TextView textView7;
@BindView(R.id.edit_code)
EditText editCode;
@BindView(R.id.btn_getcode)
Button btnGetcode;
@BindView(R.id.textView4)
TextView textView4;
@BindView(R.id.textView5)
TextView textView5;
@BindView(R.id.edit_password)
EditText editPassword;
@BindView(R.id.edit_verifypassword)
EditText editVerifypassword;
private TimeCount mTimeCount;//计时器
public EventHandler eh; //事件接收器
private boolean flag; // 操作是否成功
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
ButterKnife.bind(this);
verifyStoragePermissions(this);
init();
mTimeCount = new TimeCount(60000, 1000);
}
/**
* 计时器
*/
class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long l) {
btnGetcode.setClickable(false);
btnGetcode.setText(l / 1000 + "秒后重新获取");
}
@Override
public void onFinish() {
btnGetcode.setClickable(true);
btnGetcode.setText("获取验证码");
}
}
/**
* 初始化事件接收器
*/
private void init() {
eh = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
//坑:进入mob平台官网,进入后台,点击SMSSDK,进入短信设置,关闭是否开启Mob云验证,否则同一个手机号只能发送一次短信。
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handler.sendMessage(msg);
}
};
SMSSDK.registerEventHandler(eh); //注册短信回调接口
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (result == SMSSDK.RESULT_COMPLETE) {
// 如果操作成功
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { // 校验验证码,返回校验的手机和国家代码
Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
//将数据保存到数据库
RegisterBean bean = new RegisterBean();
bean.setPhone(editPhone.getText().toString());
bean.setPassword(editPassword.getText().toString());
bean.save(); //创建RegisterBean数据表对象bean,将手机号和密码存储到数据表registerbean中
SharePreferenceUtil.setStringSP("currentphone", editPhone.getText().toString());
SharePreferenceUtil.setStringSP("currentpassword", editPassword.getText().toString());
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { // 获取验证码成功,true为智能验证,false为普通下发短信
Toast.makeText(RegisterActivity.this, "验证码已发送", Toast.LENGTH_SHORT).show();
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) { // 返回支持发送验证码的国家列表
}
} else { // 如果操作失败
if (flag) {
Toast.makeText(RegisterActivity.this, "验证码获取失败,请重新获取", Toast.LENGTH_SHORT).show();
editPhone.requestFocus();
} else {
((Throwable) data).printStackTrace();
Toast.makeText(RegisterActivity.this, "验证码错误", Toast.LENGTH_SHORT).show();
} } } };
@Override
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(eh); //销毁回调接口
}
@OnClick({R.id.btn_register, R.id.btn_getcode})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_register:
if (TextUtil.isEmpty(editPhone.getText().toString())) {
Toast.makeText(RegisterActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();
return;
} else if (!checkTel(editPhone.getText().toString().trim())) {
Toast.makeText(RegisterActivity.this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtil.isEmpty(editPassword.getText().toString())) {
editCode.requestFocus();//把输入焦点放在该控件上
Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
// if (!matchAccount(editPassword.getText().toString())) {
// Toast.makeText(RegisterActivity.this, "请输入6-18位数字字母下划线密码", Toast.LENGTH_SHORT).show();
// return;
// } //密码太多测试时太麻烦
if (TextUtil.isEmpty(editVerifypassword.getText().toString())) {
editCode.requestFocus();//把输入焦点放在该控件上
Toast.makeText(RegisterActivity.this, "请确认密码", Toast.LENGTH_SHORT).show();
return;
}
if (!editVerifypassword.getText().toString().equals(editPassword.getText().toString())) {
Toast.makeText(RegisterActivity.this, "两次密码输入不一致", Toast.LENGTH_SHORT).show();
return;
}
if (!TextUtil.isEmpty(editCode.getText().toString())) {
SMSSDK.submitVerificationCode("+86", editPhone.getText().toString().trim(), editCode.getText().toString().trim());//提交验证
flag = false;
} else {
Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
editCode.requestFocus();
return; //哇 要被这个return给坑死了 , return了就是返回上一步,就不往下走了,
}
finish(); //原来问题在这,
break;
case R.id.btn_getcode:
if (!editPhone.getText().toString().trim().equals("")) {
if (checkTel(editPhone.getText().toString().trim())) {
//验证手机号在数据库中是否已经存在
List<RegisterBean> list = LitePal.findAll(RegisterBean.class);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getPhone().equals(editPhone.getText().toString())) {
Toast.makeText(RegisterActivity.this, "手机号已经注册", Toast.LENGTH_SHORT).show();
return;
}
}
SMSSDK.getVerificationCode("+86", editPhone.getText().toString());//获取验证
mTimeCount.start();
} else {
Toast.makeText(RegisterActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
editPhone.requestFocus();
}
} else {
Toast.makeText(RegisterActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show();
editPhone.requestFocus();
}
break;
default:
break;
}
}
}
登录:
package com.example.cindy.register;
import android.content.Intent;
import android.os.Bundle;
import android.support.constraint.Guideline;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.cindy.register.data.RegisterBean;
import com.example.cindy.register.utils.SharePreferenceUtil;
import com.example.cindy.register.utils.TextUtil;
import org.litepal.LitePal;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class LoginActivity extends AppCompatActivity {
@BindView(R.id.textView2)
TextView textView2;
@BindView(R.id.guideline3)
Guideline guideline3;
@BindView(R.id.textView3)
TextView textView3;
@BindView(R.id.password)
EditText passwordedit;
@BindView(R.id.remember_pass)
CheckBox rememberPass;
@BindView(R.id.phone)
EditText phoneedit;
@BindView(R.id.btn_login)
Button btnLogin;
@BindView(R.id.btn_register)
Button btnRegister;
@BindView(R.id.passwordeye)
ImageView passwordeye;
private boolean ispasswordshow;
private List<RegisterBean> logininfolist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
initview();
}
@Override
protected void onResume() {
super.onResume();
String currentphone = SharePreferenceUtil.getStringSP("currentphone","");
String currentpsaaword = SharePreferenceUtil.getStringSP("currentpsaaword","");
if(TextUtil.isEmpty(currentphone)){return;}
logininfolist= LitePal.findAll(RegisterBean.class);//查询LoginInfoBeanEL表中的所有数据
if(logininfolist.isEmpty()){return;}
phoneedit.setText(currentphone);
phoneedit.setSelection(currentphone.length());//设置光标位置在最后的位置
passwordedit.setText(currentpsaaword);
passwordedit.setSelection(currentpsaaword.length());
}
private void initview(){
passwordeye.setImageResource(R.drawable.eye_close_60);
ispasswordshow=false;
}
@OnClick({R.id.btn_login, R.id.btn_register,R.id.passwordeye})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_login:
if(checkNull()){return;}
//在LoginInfoBeanEL表中查询用户名和用户类型
List<RegisterBean> loginList = LitePal.where("phone = ? ", phoneedit.getText().toString()).find(RegisterBean.class);
if(loginList.isEmpty()){
//先确认此用户名在数据库中存在
Toast.makeText(LoginActivity.this, "手机号未注册", Toast.LENGTH_SHORT).show();
return;
}else if( loginList.get(0).getPassword().equals(passwordedit.getText().toString())){
//再对比密码,list的大小只能为1,因为用户名不重复
Intent i=new Intent(this, MainActivity.class);
startActivity(i);
SharePreferenceUtil.removeStringSP("currentphone");
// finish();
}else{
Toast.makeText(LoginActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
return;
}
break;
case R.id.btn_register:
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
// finish();
break;
case R.id.passwordeye:
if(ispasswordshow){
passwordedit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) ;//输入类型为普通文本|不可见的密码
passwordeye.setImageResource(R.drawable.eye_close_60);
ispasswordshow=false;
}else{
passwordedit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) ;//输入类型为用户可见的密码
passwordeye.setImageResource(R.drawable.eye_open_60);
ispasswordshow=true;
}
break;
}
}
private boolean checkNull() {
if(TextUtil.isEmpty(phoneedit.getText().toString())){
Toast.makeText(LoginActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();
return true;
}
if(TextUtil.isEmpty(passwordedit.getText().toString())){
Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
}
完整代码地址:
本文介绍了如何在Android应用中集成Mob SDK进行短信验证,并使用LitePal数据库框架进行数据存储。详细步骤包括获取App Key和App Secret,配置Mob环境,关闭Mob云验证,导入SMSSDK库,配置Android Studio项目,添加必要的权限和初始化代码,以及配置 LitePal 数据库。同时,提供了登录和注册的关键代码示例。

1万+

被折叠的 条评论
为什么被折叠?



