在用户注册的过程中,我们常常可以看到使用短信验证码的方式来验证用户手机号的真实性。在此就分享下SMSSDK的集成与使用。(Android Studio版)
第一:到其官网下载SMSSDK http://www.mob.com/#/ ,然后在其后台添加一个APP
第二:下载下来后解压文件,进入到他的SMSSDK文件夹里可以看到都有如下文件:
1,将两jar包和SMSSDK-2.1.2.arr添加到你Android Studio工程目录下的libs文件里。若要添加带GUI界面的可以把后面那个arr也加入进去,此处采用无GUI的。
即:如果你需要用GUI库,则需要加入全部这四个文件,不需要可以去掉SMSSDKGUI。为了方便和ShareSDK一起集成,公共库依然打包成jar。
如果你同时使用ShareSDK,保留一份公共库就行(公共库版本一致或兼容)。
将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面,
再在Module的build.gradle里面将libs加入仓库(repositories),
然后添加依赖(dependencies )示例如下:
,2,
repositories{
flatDir{
dirs 'libs' //就是你放aar的目录地址
}
}
3,
dependencies {
....//你的其他依赖
compile name:'SMSSDK-此处填写版本号',ext:'aar'
compile name:'SMSSDKGUI-此处填写版本号',ext:'aar'
}
4,到此若没有出现其他问题则集成完毕,接下来我们要配置他的一些权限和初始化信息:
打开您项目的“AndroidManifest.xml”,在其中添加如下的权限:
然后在“application”下添加如下activity:
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
其中appkey和appsecret即为你在mob后台添加的应用信息,替换即可。更多集成细节请移步: 这里
5,到此短信sdk的集成和配置已完成。可以调用其PAI愉快的玩耍啦...
第三:接下来我们看其短信验证的代码实现
1,涉及到与后台信息交换的sdk,一般都是采用观察者的设计模式。SMSSDK亦是如此。
注册一个事件接收器:在onCreate()方法里
private void initReceiverCode(){
this.eh=new EventHandler(){
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) {
//回调完成
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
//提交验证码成功
myHandler.sendEmptyMessage(1);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//获取验证码成功
myHandler.sendEmptyMessage(2);
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持发送验证码的国家列表
}
} else {
((Throwable) data).printStackTrace();
//此语句代表接口返回失败
//获取验证码失败。短信验证码验证失败(用flage标记来判断)
if (smsFlage==1) {
myHandler.sendEmptyMessage(3);
}else if (smsFlage==2){
myHandler.sendEmptyMessage(4);
}
}
}
};
SMSSDK.registerEventHandler(eh);//注册短信回调
}
程序退出时在onDestory()方法里:注销回调接口 registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。
SMSSDK.unregisterEventHandler(eh);
2, 获取短信验证码 请求获取短信验证码,在监听中返回
SMSSDK.getVerificationCode(country, phone);
3,提交验证码去mob后台验证用户输入的验证码是否正确,在监听中返回
SMSSDK.submitVerificationCode(country, phone, code);
4,最后在afterEvent(int event,int result,Object data)回调方法里做处理即可。
注意:短信逻辑的实现过程中需要着重注意有两种情况要考虑:第一:用户点击获取一下吗按钮后验证码是否获取成功 第二:用户提交到mob后台的验证码是否验证成功。所以我们要在else语句中设置一个标记值smsFlage来判断是获取验证码失败还是提交验证码验证失败。
更多使用详情请移步其文档:点击这里
5,好了最后帖上完整的代码:
//工程集成Mob的SMSSDK后,调用即可
//1 注册回调接口 初始化短信接送监听器【注意:回掉接口在非UI线程中so要用到Handler来通知用户】在onCreate()方法里init
private EventHandler eh;
public int smsFlage = 0;//0:设置为初始化值 1:请求获取验证码 2:提交用户输入的验证码判断是否正确
private void initReceiverCode(){
this.eh=new EventHandler(){
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) {
//回调完成
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
//提交验证码成功
myHandler.sendEmptyMessage(1);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//获取验证码成功
myHandler.sendEmptyMessage(2);
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持发送验证码的国家列表
}
} else {
((Throwable) data).printStackTrace();
//此语句代表接口返回失败
//获取验证码失败。短信验证码验证失败(用flage标记来判断)
if (smsFlage==1) {
myHandler.sendEmptyMessage(3);
}else if (smsFlage==2){
myHandler.sendEmptyMessage(4);
}
}
}
};
SMSSDK.registerEventHandler(eh);//注册短信回调
}
//2 获取短信验证码 请求获取短信验证码,在监听中返回
private void getSmsCode(String country, String phone){
SMSSDK.getVerificationCode(country, phone);//请求获取短信验证码,在监听中返回
}
//3 提交验证码
private void submitCode(String country, String phone, String code){
SMSSDK.submitVerificationCode(country, phone, code);//提交短信验证码,在监听中返回
}
//4 注销回调接口 registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。
private void unregisterHandler(){
SMSSDK.unregisterEventHandler(eh);
// Log.v("TAG", "注销回调接口");
}
Handler myHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1: //验证码验证成功
//执行bmob注册
registerUser();
break;
case 2: //获取验证码成功,注意查看
ShowToas.showToast(RegisterActivity.this, "获取验证码成功,注意查看");
break;
case 3: //获取验证码失败,请填写正确的手机号码
ShowToas.showToast(RegisterActivity.this, "获取验证码失败,请填写正确的手机号码");
break;
case 4: //验证码验证错误
ShowToas.showToast(RegisterActivity.this, "验证码错误");
break;
}
}
};