最近发现Mob短信验证还是很好用的,顺便使用了一下,记录一下使用步骤.Mob短信注册分为通过自己服务端验证和App自身验证,我这边使用的App与Mob验证.
一,As配置文件
AS版本的SMSSDK目录下包含以下内容:
smssdk_as目录结构
MobCommons.jar:Mob 通用公共库(必须)
MobTools.jar:Mob 工具公共库(必须)
SMSSDK-<version>.aar:SMSSDK 核心(必须)
SMSSDKGUI-<version>.aar:SMSSDK GUI 开源库(非必须)
HowToUse.txt:使用说明
注意:如果你同时使用ShareSDK,保留一份公共库就行(公共库版本一致或兼容)。
2.1、将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面:
smssdk_导入as项目
2.2、在Module的build.gradle里面将libs加入仓库(repositories):
repositories{
flatDir{
dirs 'libs' //就是你放aar的目录地址
}
}
2.3、在Module的build.gradle里面添加依赖(dependencies ):
dependencies {
....//你的其他依赖
compile name:'SMSSDK-<version>',ext:'aar'
compile name:'SMSSDKGUI-<version>',ext:'aar'
}
最终,你的build.gradle看起来应该像这样:
smssdk_as build文件
三、添加代码
1.配置AndroidManifest.xml
1.1、添加以下权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
1.2、添加以下Activity:
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
1.3、在Application节点下添加以下属性:
android:name="com.mob.MobApplication"
1.4、在Application节点下添加以下meta-data:
<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
最终,你的AndroidManifest.xml看起来应该像这样:
smssd_manifest
二,获取验证码和检验验证码
1.1,获取验证码
SMSSDK.getVerificationCode("86", phoneNum);
1.2,与MOb检验验证码是否正确
SMSSDK.submitVerificationCode("86", phoneNum, verify);
三,注册事件便于自己后续操作
1.1注册事件
SMSSDK.registerEventHandler(eh);
1.2注册后处理自己事件
EventHandler eh = new EventHandler() {
public void afterEvent(int arg0, int arg1, Object arg2) { //afterEvent 为调用SDK之后回调的方法
Message m = Message.obtain();
m.what = 1;
m.arg1 = arg0;//event
m.arg2 = arg1;//result
smsHandler.sendMessage(m);
}
};
Handler smsHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (msg.arg2 == SMSSDK.RESULT_COMPLETE) {//发送成功的情况
if (msg.arg1 == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//验证成功通过
Intent intent = new Intent(getApplicationContext(), PassWordActivity.class);
intent.putExtra("username", phoneNum);
startActivity(intent);
} else if (msg.arg1 == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//验证码已经从服务器发出
ToastUtil.show(getApplicationContext(), "验证码已发出,请注意查收");
}
} else {
ToastUtil.show(getApplicationContext(), "验证码错误");
}
break;
}
}
;
};
四,按钮监听倒计时器
private class MyHandler extends Handler {
private final WeakReference<RegisterActivity> weakReference;
public MyHandler(RegisterActivity activity) {
weakReference = new WeakReference<RegisterActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
RegisterActivity activity = weakReference.get();
if (activity != null) {
switch (msg.what) {
case 0:
if (msg.arg1 == 0) {
getVerify.setText("重新获取");
getVerify.setClickable(true);
} else {
getVerify.setText("重新获取(" + msg.arg1 + ")秒");
getVerify.setClickable(false);
}
break;
}
}
}
}
private void sendMessageClick() {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 59; i >= 0; i--) {
Message msg = myHandler.obtainMessage();
msg.arg1 = i;
myHandler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}