因为mob 的短信验证码是完全免费,完~全~免~费~,所以老大就让我用它
其实,个人感觉mob 的短信验证发生时间很不稳定,会延迟,而且未审核之前一个手机号一天只允许请求5次,一个mob账号一天最多发送20次。
使用起来效率可能会相对比较低,但是,它是完~全~免~费~的~~~
1. 以用户提供的手机号码作为参数,请求连接到SMSSDK的服务器
2. SMSSDK服务器校验号码格式成功,请求短信服务商发送短信验证码到该手机号
3. 手机终端接收到验证码,用户输入验证码
4. 验证码传入应用后台服务端,服务端通过SMSSDK接口验证,再把验证结果传回手机端
分两种,第一种是无GUI,第二种是有GUI
有GUI是指,SMSSDK里面有一个接口,调用这个接口可以使用SMSSDK已经为我们写好的登录注册布局,短信验证码以及短信验证回调方法;
当不想使用SMSSDK里面提供的布局或者只是需要短信验证码时,调用第一种无GUI方法。
一、无GUI集成短信验证码的SMSSDK
1. 从mob官网下载短信验证码的SDKhttp://www.mob.com/#/downloadDetail/SMS/android
2. 把Android SMSSDK v2.0.1.zip下的jar包放到项目的libs目录下,还有其中的raw文件(包括raw文件中的so文件)拉到项目的res中。如果找不到该文件,可以修改SMSSDK-2.0.1文件的格式为rar再从中获取。
3. 配置AndroidManifest.Xml所需要的权限:
``` python
```
在
``` python
android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize"/> ``` 4. 在activity中写代码,分2步执行,一加载,二发送 // appkey和appSecret在mob申请的应用中获取 // 初始化SDK,单例,可以多次调用;任何方法调用前,必须先初始化 SMSSDK.initSDK(this, "您的appkey", "您的appsecret"); // 其中参数第一个代表的是国家代号,86为中国 SMSSDK.getVerificationCode("86","手机号码"); 这样就完成一个简单请求短信验证码的功能。 服务器验证短信验证码必须先打开服务器验证的开关,否则无法进行验证。 二、有GUI接口集成调用 1. 有GUI集成大致与无GUI相同,需要在libs目录下多加一个SMSSDKGUI-2.0.1.jar包 2. 集成权限配置(同无GUI接口一致) 3. 添加代码 ``` python //初始化 SMSSDK.initSDK(this, "您的appkey", "您的appsecret"); //调用代码打开GUI页面 //打开注册页面 RegisterPage registerPage = new RegisterPage(); registerPage.setRegisterCallback(new EventHandler() { public void afterEvent(int event, int result, Object data) { // 解析注册结果 if (result == SMSSDK.RESULT_COMPLETE) { @SuppressWarnings("unchecked") HashMap String country = (String) phoneMap.get("country"); String phone = (String) phoneMap.get("phone"); // 提交用户信息 registerUser(country, phone); } } }); registerPage.show(context); ``` static void getSupportedCountries() static void getVerificationCode(String country, String phone) static void submitVerificationCode(String country, String phone, String code) 短信SDK不能支持所有国家的短信验证,调用getSupportedCountries方法能获取到SDK可以支持的国家列表和国家代号。 请求getVerificationCode的时间间隔不应该小于60秒,否则服务端会返回“操作过于频繁”的错误。 submitVerificationCode用于向服务器提交接收到的短信验证码,验证成功后会通过EventHandler返回国家代码和电话号码。 EventHandler是短信回调接口,在使用之前必须先注册,同样,有注册就有注销。 SMSSDK.registerEventHandler(EventHandler handler)注册回调接口 SMSSDK.unregisterEventHandler(EventHandler handler)注销回调接口 registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。 ``` python // 短信回调代码 EventHandler 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) { //提交验证码成功 }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //获取验证码成功 }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持发送验证码的国家列表 } }else{ ((Throwable)data).printStackTrace(); } } }; SMSSDK.registerEventHandler(eh); //注册短信回调 ``` 引入服务端验证接口走以下流程 1.手机端请求下发短信 2.SMSSDK服务器请求短信服务商 3.短信服务商下发短信 4.手机端发送短信验证码到开发者服务器进行验证 5.开发者服务器发送到SMSSDK服务器进行验证 6.SMSSDK服务器返回开发者服务器验证结果 7.开发者服务器把验证结果返回手机端 在没有短信服务端验证接口的时候,我的服务器需要知道用户是否验证成功是这样走的 1. 手机端请求下发短信 2. SMSSDK服务器请求短信服务商 3. 短信服务商下发短信 4. 手机端发送短信验证码到SMSSDK服务器进行验证 5. SMSSDK服务器返回手机端验证结果 6. 手机端把验证结果返回开发者服务器 以上为个人的总结,疑问或者有不妥当之处,请指出 第一次写博客,好激动~~~ 接下来会好好努力,坚持下去
获取短信目前支持的国家列表,在监听中返回
请求获取短信验证码,在监听中返回
提交短信验证码,在监听中返回流程图: