AndroidStudio短信验证之MobSMS与BmobSMS。html
/*SMS-将libs加入仓库(repositories)*/
repositories {
flatDir {
dirs 'libs'// aar目录地址
}
}
复制代码
compile name: 'SMSSDK-3.0.0', ext: 'aar'
复制代码
权限android
<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" />
复制代码
applicationgit
<!-- SMS-配AppKey和AppSecret -->
<meta-data
android:name="Mob-AppKey"
android:value="xxx" />
<meta-data
android:name="Mob-AppSecret"
android:value="xxx" />
<!-- SMS-添Activity -->
<activity
android:name="com.mob.tools.MobUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
复制代码
/*
* 提示用户读取通讯录则添下面代码且须其它代码调用前,否无用;无此需求可不加该行代码
* 加该行代码,申请权限成功,系统再弹对话框提示用户是否继续用该权限
* */
SMSSDK.setAskPermisionOnReadContact(true);
// 初始化EventHandler对象
eventHandler = 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(eventHandler);
复制代码
/**
* 处理手机验证码
*
* @param countries
*/
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (result == SMSSDK.RESULT_COMPLETE) {
// 回调完成 result-1
/*boolean smart = (Boolean) data;
if (smart) {// 经过智能验证
} else {// 仍走短信验证
}*/
LogManager.e("验证码状态", "回调完成" + " " + event + "" + result);
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
// 提交验证码成功 event-1
LogManager.e("验证码状态", "提交成功" + " " + event + "" + result);
App.getInstance().setUserPhone(etUserPhoneRegister.getText().toString().trim());
jumpNoBundle(PersonalInfoActivity.class);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
// 获验证码成功 event-2
LogManager.e("验证码状态", "获取成功" + " " + event + "" + result);
toastShort(getString(R.string.identifyCodeGetHint));
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
// 返支持发送验证码国家列表 event-3
}
} 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)) {
toastShort(des);
return;
}
} catch (Exception e) {
SMSLog.getInstance().w(e);
}
}
}
};
复制代码
/*
* 短信SDK并不支持世界上全部国家短信验证服务,故提供getSupportedCountries方法,用短信验证码功能前调此方法获当前SDK支持国家列表和号码匹配规则。
* getVerificationCode用于向服务器请求发送验证码服务,监听中返回,需传国家代号和接收验证码手机号码,在getSupportedCountries中获支持此服务国家代码。
* 请求getVerificationCode时间间隔应不小60秒,否服务端返回“操做过于频繁”错误。
* submitVerificationCode用于向服务器提交所接短信验证码,验证成功后经过EventHandler返国家代码和电话号码。
*/
SMSSDK.getVerificationCode("86",etUserPhoneRegister.getText().toString().trim());
复制代码
// 注销SDK防内存泄漏
SMSSDK.unregisterEventHandler(eventHandler);
复制代码
gradle(project)github
// Bmob之maven仓库地址
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
复制代码
gradle(app)apache
android {
// 兼容6.0出错在dependencies下用compile 'cn.bmob.android:http-legacy:1.0'
useLibrary 'org.apache.http.legacy'
}
dependencies {
compile 'cn.bmob.android:http-legacy:1.0'
/*兼容6.0加依赖org.apache.http.legacy.jar*/
compile 'cn.bmob.android:bmob-sdk:3.5.5'
/*bmob*/
}
复制代码
或bash
// Bmob短信服务单包
compile 'cn.bmob.android:bmob-sms:1.0.1'
复制代码
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--保CPU运转,屏幕和键盘灯可关闭,用于文件上传下载 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--容许读手机状态 创BmobInstallation-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
复制代码
// 默初始化
Bmob.initialize(this, "Application ID");
复制代码
BmobSMS.requestSMSCode("13673541527", "哈哈:123456", new QueryListener<Integer>() {
@Override
public void done(Integer integer, BmobException e) {
if (e == null) {
// 验证码发送成功
toastShort("发送成功" + integer);
} else {
toastShort(e.getErrorCode() + e.getLocalizedMessage());
}
}
});
复制代码
BmobSMS.verifySmsCode(etUserPhoneRegister.getText().toString().trim(), etIdentifyCodeRegister.getText().toString().trim(), new UpdateListener() {
@Override
public void done(BmobException e) {
if (e != null) {
toastShort("验证成功");
}
}
});
复制代码