短信验证
来源:互联网 发布:windows snmptools 编辑:程序博客网 时间:2024/05/22 09:44
前言
AndroidStudio中短信验证之MobSMS与BmobSMS。
MobSMS
配置
SDK
- libs
gradle(app)
/*SMS-将libs加入仓库(repositories)*/repositories { flatDir { dirs 'libs'// aar目录地址 }}
compile name: 'SMSSDK-3.0.0', ext: 'aar'
- libs
清单文件
权限
<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" />
application
<!-- SMS-配置AppKey和AppSecret --><meta-dataandroid:name="Mob-AppKey"android:value="xxx" /><meta-dataandroid:name="Mob-AppSecret"android:value="xxx" /><!-- SMS-添加Activity --><activityandroid: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);
BmobSMS
配置
SDK
gradle(project)
// Bmob之maven仓库地址maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
gradle(app)
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*/}
或
// 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("验证成功"); } }});
对比
模板定制
- Mob账户接入http短信并改过短信签名(即短信后缀)才支持修改短信模板,SDK短信内容不支持自定义。参考
- Bmob账户后台定制
验证码自动填充
- Mob账户不支持
- Bmob账户支持
价格
- 每Bmob帐户10条免费短信用于测试,超过需购买才能继续使用
- Mob账户
- SMSSDK2.X+版通过上线登记审核后完全免费
- 应用未通过上线登记审核,每天仅20条测试短信
- HTTP-API短信将据运营商供最低价格标准收费
阅读全文
0 0
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 短信验证
- 白帽子讲web安全(1)
- kafka简单配置测试
- 并发工具类(四)线程间的交换数据 Exchanger
- 正向代理与反向代理通俗版解释
- http Content-Type
- 短信验证
- 机器学习实战 树回归
- vtk实现两个相同的DICOM文件同步旋转
- 珠心算测验-vijos
- 遍历聚合对象中的元素——迭代器模式(三)
- BOM导致的空白问题
- 每天一道LeetCode-----在有序的二维数组中查找某个元素
- 1045. 快速排序(25)
- python3.4写好的.py文件如何打包成exe?