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); } } }; }; }