登录,注册功能(mob,LitePal)

本文介绍了如何在Android应用中集成Mob SDK进行短信验证,并使用LitePal数据库框架进行数据存储。详细步骤包括获取App Key和App Secret,配置Mob环境,关闭Mob云验证,导入SMSSDK库,配置Android Studio项目,添加必要的权限和初始化代码,以及配置 LitePal 数据库。同时,提供了登录和注册的关键代码示例。

 

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:

配置数据库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;
    }
}

 

完整代码地址:

登录注册demo地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值