android短信验证码(mob)

mob的网址是mob.com,蛮好记的,注册及获取相应的APP KEY 、APP SECRET就不多说了。

我用的是无GUI的,跟大家说下无GUI的集成,顺便记录下,以备后用。

首先说下,我用的工具是stutio,如果用eclipse的话,跟stutio其实类似。

1、到官网下载SDK,将MobCommons、MobTools、SMSSDK三个包放入lib下。


2、在app的build.gradle中加入以下代码


repositories{
	flatDir{
		dirs 'libs'
	}
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile name: 'SMSSDK-2.1.3', ext: 'aar'
  
}
3、正式开始编写代码:在viewmodel中加入以下代码(我用的mvvm,如果用mvc或其他模式的放在activity中也一样)

①编写事件接收器

一些特殊的处理需要放在接收器里写~~

比如:发送验证码成功、验证码验证等~~

Handler mHandler = new Handler()
    {
        public void handleMessage(Message msg) {

            // TODO Auto-generated method stub
            super.handleMessage(msg);
            int event = msg.arg1;
            int result = msg.arg2;
            Object data = msg.obj;
            if (result == SMSSDK.RESULT_COMPLETE) {
                if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                    System.out.println("--------event---"+event+"--------result*"+result);
                    Toast.makeText(mContext, "发送验证码成功", Toast.LENGTH_SHORT).show();
                }else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功
                    System.out.println("--------event---"+event+"--------result*"+result);
                   //Toast.makeText(mContext, "验证成功", Toast.LENGTH_SHORT).show();
                    registerAfter();
                }
            } else {
                int status = 0;
                try {
                    ((Throwable) data).printStackTrace();
                    Throwable throwable = (Throwable) data;

                    JSONObject object = new JSONObject(throwable.getMessage());
                    String des = object.optString("detail");
                    status = object.optInt("status");
                    if (!TextUtils.isEmpty(des)) {
                        Toast.makeText(mContext, des, Toast.LENGTH_SHORT).show();
                        return;
                    }
                } catch (Exception e) {
                    SMSLog.getInstance().w(e);
                }
            }

        };
    };

②初始化以及注册接收器:(构造函数以及oncreate方法中都可以)

SMSSDK.initSDK(mContext, "193d16f5b5ba0", "056a8d420c96d6442f24328a34395928");
        EventHandler 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;
                mHandler.sendMessage(msg);
            }

        };
        SMSSDK.registerEventHandler(eh);

③获取验证码,是的就这一句就OK了,第一个参数是区号(中国是86,我的用户只是中国的,所以区号就写了86),第二个参数是手机号码
SMSSDK.getVerificationCode("86", mRegisterModel.phonenumber);

④验证码验证,同样也是一句,第一个参数是区号,第二个参数是手机号码,第三个是验证码
SMSSDK.submitVerificationCode("86", mRegisterModel.phonenumber, code);

到这里整个验证码从获取到验证就完成了。
顺便把代码贴出来记录下~
 
 
package com.zhijieyun.zyt.viewmodel;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.dkt.library.common.api.ServiceFactory;
import com.dkt.library.common.api.TransformUtils;
import com.dkt.library.common.api.subscriber.HttpResultSubscriber;
import com.dkt.library.common.utils.StringUtils;
import com.dkt.library.common.utils.ToastUtils;
import com.dkt.library.model.Response;
import com.zhijieyun.zyt.R;
import com.zhijieyun.zyt.activitis.RegisterActivity;
import com.zhijieyun.zyt.activitis.UserAgreementActivity;
import com.zhijieyun.zyt.common.api.ApiService;
import com.zhijieyun.zyt.databinding.ActivityRegisterBinding;
import com.zhijieyun.zyt.model.RegisterModel;
import com.zhijieyun.zyt.model.main.RegisterResponse;

import org.json.JSONObject;

import java.util.concurrent.TimeUnit;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cn.smssdk.utils.SMSLog;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.functions.Func1;

/**
 * Created by langji on 2016/10/24.
 */

public class RegisterVM implements TextWatcher {

    private ActivityRegisterBinding mBinding;
    private Context mContext;
    public RegisterModel mRegisterModel;
    public static final int DELAY_SECONDS = 60;
    public String idCard = "";
    public String code = "";
    public String pwd = "";
    public String pwdAgain = "";
    public ObservableBoolean contract = new ObservableBoolean(true);
    public ObservableBoolean registerBtnEnabled = new ObservableBoolean(false);
    public ObservableField
     
     
      
       codeBtnTxt = new ObservableField<>();
    public ObservableBoolean codeBtnEnable = new ObservableBoolean(true);

    public ObservableBoolean setRegisterBtnEnabledState() {
        if(!StringUtils.isNullOrEmpty(mRegisterModel.name) &&
                !StringUtils.isNullOrEmpty(mRegisterModel.authcode) &&
                !StringUtils.isNullOrEmpty(mRegisterModel.phonenumber) &&
                !StringUtils.isNullOrEmpty(code) &&
                !StringUtils.isNullOrEmpty(pwd) &&
                !StringUtils.isNullOrEmpty(pwdAgain) &&
                contract.get()) {
            registerBtnEnabled.set(true);
        } else {
            registerBtnEnabled.set(false);
        }
        return registerBtnEnabled;
    }

    public RegisterVM(ActivityRegisterBinding binding) {
        mBinding = binding;
        mContext = mBinding.getRoot().getContext();
        mRegisterModel = new RegisterModel();
        SMSSDK.initSDK(mContext, "", "");
        EventHandler 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;
                mHandler.sendMessage(msg);
            }

        };
        SMSSDK.registerEventHandler(eh);
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        setRegisterBtnEnabledState();
    }

    /**
     * 注册的点击事件
     * @param view
     */
    public void onClickRegister(View view) {
        if (validation()) {
            register();
        }
    }

    /**
     * 注册
     */
    private void register() {

        SMSSDK.submitVerificationCode("86", mRegisterModel.phonenumber, code);

        /**/
    }

    private void registerAfter(){
        mRegisterModel.passmd5 = StringUtils.md5(pwd);
        ((RegisterActivity) mContext).showLoadingDialog();
        ApiService apiService = ServiceFactory.getInstance().createService(ApiService.class);
        apiService.register(mRegisterModel)
                .compose(TransformUtils.
      
      
       
       
        
        >defaultSchedulers())
                .subscribe(new HttpResultSubscriber
        
        
         
         () {
                    @Override
                    public void onSuccess(RegisterResponse registerResponse) {
                        Toast.makeText(mContext,"注册成功",Toast.LENGTH_LONG).show();
                        ((RegisterActivity) mContext).finish();
                    }

                    @Override
                    public void _onError(Throwable e) {
                        ((RegisterActivity) mContext).hideLoadingDialog();
                        Toast.makeText(mContext,e.toString(),Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(Throwable e) {
                        ((RegisterActivity) mContext).hideLoadingDialog();
                        Toast.makeText(mContext,e.toString(),Toast.LENGTH_LONG).show();
                        super.onError(e);
                    }

                    @Override
                    public void onCompleted() {
                        ((RegisterActivity) mContext).hideLoadingDialog();
                        super.onCompleted();
                    }
                });
    }

    /**
     * 登录点击事件
     * @param view
     */
    public void onClickGoToLogin(View view) {
        ((Activity)mContext).finish();
    }

    /**
     * 同意协议点击事件
     * @param view
     */
    public void onClickAggree(View view) {
        if (contract.get()) {
            contract.set(false);
        } else {
            contract.set(true);
        }
        setRegisterBtnEnabledState();
    }

    /**
     * 跳转用户协议界面
     * @param view
     */
    public void onClickOpenAgreement(View view){
        mContext.startActivity(new Intent(mContext, UserAgreementActivity.class));
    }
    /**
     * 获取验证码的点击事件
     * @param view
     */
    public void onClickGetCode(View view) {
        if (validation()) {
            startTimer();
            SMSSDK.getVerificationCode("86", mRegisterModel.phonenumber);
        }

    }

    /**
     * 开始倒计时
     */
    private void startTimer() {
        Observable.interval(0, 1, TimeUnit.SECONDS)
                .subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1
         
         
           () { @Override public Integer call(Long increaseTime) { return DELAY_SECONDS - increaseTime.intValue(); } }) .take(DELAY_SECONDS + 1) .doOnSubscribe(new Action0() { @Override public void call() { codeBtnEnable.set(false); } }) .subscribe(new Subscriber 
          
            () { @Override public void onCompleted() { codeBtnTxt.set(mContext.getString(R.string.resend_code)); codeBtnEnable.set(true); } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { codeBtnTxt.set(mContext.getString(R.string.resend_code) + "(" + integer + ")"); } }); } /** * 验证格式等信息 * @return */ public boolean validation() { if (!StringUtils.isPhone(mRegisterModel.phonenumber)) { ToastUtils.getInstance().showToast(mContext.getString(R.string.mobile_error)); mBinding.mobile.setShakeAnimation(); return false; } if (!pwd.equals(pwdAgain)) { ToastUtils.getInstance().showToast(mContext.getString(R.string.pwd_inconformity)); mBinding.mobile.setShakeAnimation(); return false; } return true; } Handler mHandler = new Handler() { public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; Log.e("event", "event="+event); System.out.println("--------event---"+event+"--------result*"+result+"--------"+data); if (result == SMSSDK.RESULT_COMPLETE) { if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { System.out.println("--------event---"+event+"--------result*"+result); Toast.makeText(mContext, "发送验证码成功", Toast.LENGTH_SHORT).show(); }else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功 System.out.println("--------event---"+event+"--------result*"+result); //Toast.makeText(mContext, "验证成功", Toast.LENGTH_SHORT).show(); registerAfter(); } } else { System.out.println("--------result---"+event+"--------*"+result+"--------"+data); int status = 0; try { ((Throwable) data).printStackTrace(); Throwable throwable = (Throwable) data; JSONObject object = new JSONObject(throwable.getMessage()); String des = object.optString("detail"); status = object.optInt("status"); if (!TextUtils.isEmpty(des)) { Toast.makeText(mContext, des, Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { SMSLog.getInstance().w(e); } } }; }; } 
           
         
        
        
       
       
      
      
     
     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值