情诗网 >情话短信 > 正文

Android Mob短信验证

来源:情诗网    2021-01-18    分类:情话短信

  1. 首先到Mon(http://www.mob.com/)官网上注册登录,添加一个SMSSDK应用,获取App Key和App Secret。
    image.png
  1. 快速集成配置
    打开项目根目录 Project 下的build.gradle文件,添加如下配置:


    image.png

在app模块的build.gradle中,添加MobSDK插件和扩展:

// 添加插件
apply plugin: 'com.mob.sdk'
 
// 在MobSDK的扩展中注册SMSSDK的相关信息
MobSDK {
    appKey "d580ad56b4b5"
    appSecret "7fcae59a62342e7e2759e9e397c82bdd"
    SMSSDK {}
}

注意项目的minSdkVersion最小要改为15,否则build过程会报错。

  1. 初始化MobSDK
    如在RegisterActivity的onCreate()方法中初始化:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);

        //在onCreate方法初始化SDK
        MobSDK.init(RegisterActivity.this);

        initView();
        initEvent();
        initSMS();
    }
  1. 注册回调监听
 //注册回调监听,放到发送和验证前注册,注意这里是子线程需要传到主线程中去操作后续提示
    private void initSMS() {
        eh = new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                handler.sendMessage(msg);
            }
        };

        SMSSDK.registerEventHandler(eh); //注册短信回调
    }
  1. 处理点击事件
@Override
    public void onClick(View v) {
        String phoneNum = phone.getText().toString().trim();

        switch(v.getId()){
            case R.id.register_get_code:
                if(TextUtils.isEmpty(phoneNum)){
                    Toast.makeText(this,"手机号码不能为空",Toast.LENGTH_SHORT).show();
                }else{
                    if(checkTel(phoneNum)){
                        //调用发送短信的接口
                        //发送成功后回调event == SMSSDK.EVENT_GET_VERIFICATION_CODE
                        SMSSDK.getVerificationCode("86",phoneNum);

                        getcode.setClickable(false);
                        //开始倒计时
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                for(; i>0; i--){
                                    handler.sendEmptyMessage(-1);
                                    try{
                                        Thread.sleep(1000);  //1s
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                }
                                //倒计时结束后执行
                                handler.sendEmptyMessage(-2);
                            }
                        }).start();
                    }else{
                        Toast.makeText(this,"请输入正确的手机号码",Toast.LENGTH_SHORT).show();
                    }
                }
                break;
            case R.id.register:
                String codeNum = code.getText().toString().trim();
                if(TextUtils.isEmpty(phoneNum)){
                    Toast.makeText(this,"手机号码不能为空",Toast.LENGTH_SHORT).show();
                }else if(TextUtils.isEmpty(codeNum)){
                    Toast.makeText(this,"验证码不能为空",Toast.LENGTH_SHORT).show();
                }else{
                    if(checkTel(phoneNum)){
                        //调用验证码验证接口
                        //成功后回调event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE
                        SMSSDK.submitVerificationCode("86",phoneNum,codeNum);

                    }else{
                        Toast.makeText(this,"请输入正确的手机号码",Toast.LENGTH_SHORT).show();
                    }

                }
                break;
            default:
                break;
        }
    }

 //正则匹配手机号码
    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();
    }

对事件的处理在主线程的Handler中写。

  1. 销毁监听接口
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //在完成短信验证之后,需要销毁回调监听接口
        SMSSDK.unregisterAllEventHandler();
    }

热门文章