目录
- mob简单介绍
- 前期准备
- 2.1注册登录
- 2.2创建应用
- 2.3下载sdk
- 2.4引入sdK
- 调用有界面接口
- 3.1效果图
- 3.2配置AndroidManifest.xml
- 3.3添加代码
- 调用无界面接口
- 4.1效果图
- 4.2操作步骤
- 监听器(回调接口)
- 智能短信验证
- 6.1使用智能验证
- 服务器短信服务
- 7.1接口使用
- 错误码参考
- 8.1本地错误码
- 8.2服务器错误码
- 附加
- 9.1权限修改
- 9.2mob规则
- demo下载地址
正文
1.mob简单介绍
基本上很多验证都需要用到短信服务,注册登录时或有消息通知时需要对用户进行验证,这时会向用户发送一条短信。Mob是一个移动开发者服务平台,他可以为我们提供第三方的短信服务功能。开发者可以通过官网,注册登录并创建应用项目,获取对应的Key,以及 Secret,就可以使用官方短信SDK。
个人觉得Mob最大的优势在于,提供数据统计,对于应用分析是一个很好的数据参考。
2. 前期准备
正如前面所说,要想使用Mob第三方短信验证服务,开发者需要通过官网,注册登录并创建应用项目,获取对应的Key,以及 Secret,就可以使用官方短信SDK。
2.1注册登录
进入官网,在右上角进行注册并登录
2.2创建应用
2.2.1
登录成功后,进入后台
2.2.2
启用短信应用SDK
2.2.3
添写应用信息,短信信息中会附有应用名称
2.2.4
得到key值以及secret
2.3下载sdk
2.3.1
可以通过官网导航栏进入短信SDK界面
也可以直接通过该链接:
http://download.csdn.net/download/abrazen_zz/9644555 进行下载
2.3.2
选择IDE版本
2.4引入sdk
这里只讲解Android Studio导入方式
2.4.1
打开下载好的SDK,在SMSSDK下,将以下标出的四个文件导入到项目app的libs目录下(如果没有libs文件夹可以直接新建)。
SMSSDK目录如下:
2.4.2
在build.gradle下,加上蓝圈中的这几句。
项目结构:
3.调用有界面接口
3.1效果图
考虑到等待时间较长,这里省略输入手机号码界面,短信发至另外部手机,效果如下:
3.2配置AndroidManifest.xml
3.2.1
添加如下的权限:
<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" />
3.2.2
在application标签下添加跳转界面的Activity配置:
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
3.3添加代码
在你要跳转到短信页面时,按顺序加入以下步骤的代码
3.3.1
启动时初始化
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
3.3.2
发送短信验证码
短信SDK内置了开源的GUI功能,您可以通过调用下面的代码打开短信验证页面:
//创建注册页面
RegisterPage registerPage = new RegisterPage();
//显示界面
registerPage.show(MainActivity.this);
//回调函数
registerPage.setRegisterCallback(new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// 解析注册结果
if (result == SMSSDK.RESULT_COMPLETE) {
@SuppressWarnings("unchecked")
HashMap<String, Object> phoneMap = (HashMap<String, Object>) data;
String country = (String) phoneMap.get("country");
String phone = (String) phoneMap.get("phone");
Toast.makeText(MainActivity.this, "验证成功", Toast.LENGTH_SHORT).show();
// 提交用户信息(此方法可以不调用)
//registerUser(country, phone);
}
}
});
只要初始化并显示短信验证界面,剩下的SDK都封装好了。我们也可以监听短信验证的每个步骤,如请求获取验证短信,验证成功,验证失败等等。
这里使用setRegisterCallback()为短信添加一个EventHandler监听方法,result == SMSSDK.RESULT_COMPLETE即验证码验证成功后的监听。
具体关于短信验证的回调函数在下面有做分析,在这里只是简单的参考。
4.调用无界面接口
4.1效果图
这里是我自己制作的页面,点击验证按钮就会调用官方提供接口上传手机号码,从而请求下发短信。效果如下:
4.2操作步骤
4.2.1
同理,这里需要在AndroidManifest.xml中添加权限,因为不需要调用界面,所以不需要配置< activity>< /activity>.
4.2.2
在点击事件,添加如下代码:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1)
Toast.makeText(mActivity, "回调完成", Toast.LENGTH_SHORT).show();
else if (msg.what == 2)
Toast.makeText(mActivity, "提交验证码成功", Toast.LENGTH_SHORT).show();
else if (msg.what == 3)
Toast.makeText(mActivity, "获取验证码成功", Toast.LENGTH_SHORT).show();
else if (msg.what == 4)
Toast.makeText(mActivity, "返回支持发送国家验证码", Toast.LENGTH_SHORT).show();
}
};
//回调函数
EventHandler eh = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) {
handler.sendEmptyMessage(1);
//回调完成
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
//提交验证码成功
handler.sendEmptyMessage(2);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//获取验证码成功
handler.sendEmptyMessage(3);
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持发送验证码的国家列表
handler.sendEmptyMessage(4);
}
} else {
((Throwable) data).printStackTrace();
}
}
};
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");//初始化
SMSSDK.registerEventHandler(eh); //注册短信回调
SMSSDK.getVerificationCode("86", phone);//请求获取短信验证码
这里使用registerEventHandler()方法为短信验证增加一个EventHandler的监听对象。
其次,这里只是请求下发短信到手机。并未进行判断验证码是否准确。
可以通过
submitVerificationCode(String country, String phone, String code)
对短信进行验证。请求成功与否,验证成功与否会调用回调函数EventHandler。
5. 监听器(回调接口)
其中的EventHandler即为操作回调。它包括4个方法,分别为:
- public void onRegister(); //注册监听时被触发
- public void beforeEvent(int event, Object);//操作执行前被触发
- public void afterEvent(int event, int result, Object data);//操作结束时被触发(即相当于输入手机号码并点击了验证)
- public void onUnregister();//解除监听时被触发
其中要注意的是:afterEvent在操作结束时被触发,event表示操作的类型但是,data表示事件操作结果,其具体取值根据参数result而定。result是操作结果,为SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败。
当result=SMSSDK.RESULT_COMPLETE时
先判断result,再判断event,之后直接将data强壮成对应的类型即可。
短信SDK采用“广播”的方式发送操作结果。每次调用registerEventHandler都会设置创建新的EventHandler。
为了避免EventHandler注册后不再使用而造成内存泄漏,请务必在确定不使用某个EventHandler时,需要解除注册,方法如下:
SMSSDK.unregisterEventHandler(EventHandler);
在EventHandler的4个回调方法都可能不在UI线程下,因此如果要在其中执行UI操作,请务必使用Handler发送一个消息给UI线程处理。
当result=SMSSDK.RESULT_ERROR时
值得一提的是,如果返回错误,即:result=SMSSDK.RESULT_ERROR,开发者可用获取错误信息,并进行相应的操作。
try {
Throwable throwable = (Throwable) data;
throwable.printStackTrace();//打印错误信息
JSONObject object = new JSONObject(throwable.getMessage());
String des = object.optString("detail");//错误描述
int status = object.optInt("status");//错误代码
if (status > 0 && !TextUtils.isEmpty(des)) {//输出信息
Toast.makeText(activity, des, Toast.LENGTH_SHORT).show();
return;
}
} catch (Exception e) {
//do something
}
返回的json数据包含错误码,开发者可以对照第八点错误码参考。就能知道错误码所对应的错误。
6. 智能短信验证
从Android 1.3.1版本开始,我们新增了智能验证功能。智能验证是指您的手机号最近一次已经在Mob平台的SMSSDK验证过。此时就不再下发短信到该手机上,直接通过验证。当用户手机未通过智能验证时,则依然需要下发短信/语音验证码的方式验证手机号的有效性。
如果你不想使用此功能,可以在短信的后台关闭,默认是打开。
6.1使用智能验证
智能验证依然在获取短信验证的api(SMSSDK.getVerificationCode)里,只是操作回调中,需要判断一下。当result=SMSSDK.RESULT_COMPLETE,则data的类型为Boolean,你需要判断一下,如果为true,便是智能验证。
调用代码如下:
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
if(result == SMSSDK.RESULT_COMPLETE) {
boolean smart = (Boolean)data;
if(smart) {
//通过智能验证
} else {
//依然走短信验证
}
}
}
7. 服务器短信服务
之前,短信验证码正确与否是在客户端调用submitVerificationCode(String country, String phone, String code);进行判断。
Mob提供服务器短信服务,即在验证码正确与否由自己的服务器调用相应的代码进行判断。这样,客户端只需要将获取到的短信验证码提交到自己的服务器。再由自己的服务器向短信验证的服务器去判定。
7.1接口使用
第一步:开通服务端验证开关
免费短信验证码SDK/应用管理/短信设置 , 把服务端验证接口开关开启
第二步:请求接口验证短信
请求地址为:https://webapi.sms.mob.com/sms/verify
请求方式: POST
请求参数
返回结果
{status:200}
8. 错误码参考
8.1本地错误码:
8.2服务器错误码:
如下,这是验证码输入错误Android studio 报的错误..
有了状态码,就能知道到底是本地发生错误还是服务器,具体是什么错误。
9. 附加
9.1权限修改
9.1.1
SMSSDK中用到的权限
普通组:
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.INTERNET
android.permission.GET_TASKS
谨慎组:
android.permission.READ_PHONE_STATE
android.permission.RECEIVE_SMS
android.permission.READ_SMS
android.permission.READ_CONTACTS
android.permission.WRITE_EXTERNAL_STORAGE
这些权限一般在Manifest文件中按需加入
9.1.2
6.0权限
因为6.0权限授权的改变,即使你在Manifest中加入,有些权限依然需要获得用户的手动授权。由于手动授权在SDK中不好做,
它会中断SDK的初始化,因此需要开发者自己实现权限授权。
上面普通组中的只需在manifest文件中加入即可。谨慎组中的需要额外授权。
如果你需要智能验证,请授权READ_PHONE_STATE,READ_SMS。
如果你需要通讯录功能,请授权READ_CONTACT。
如果你需要读取SD卡,请授权WRITE_EXTERNAL_STORAGE
如果用到UI库中的自动读取验证码,请授权RECEIVE_SMS
具体授权过程请参考官方教材:
http://developer.android.com/training/permissions/index.html
9.2mob规则
mob规则是指,对短信数量及各方面做了限制。
具体参考该链接: http://wiki.mob.com/smssdk2-x-x%E9%BB%98%E8%AE%A4%E8%A7%84%E5%88%99/
10. demo下载地址:具体等明天上传后再附上链接
10.1调用有界面接口
下载链接:http://download.csdn.net/download/abrazen_zz/9644646
10.2调用无界面接口
下载链接:
11. 参考链接
官方文档:http://wiki.mob.com/android-%E7%9F%AD%E4%BF%A1sdk%E9%9B%86%E6%88%90%E6%96%87%E6%A1%A3/
原文链接:http://blog.csdn.net/Abrazen_zz/article/details/52721884