Android之Mob第三方短信验证服务

目录


  1. mob简单介绍
  2. 前期准备
    • 2.1注册登录
    • 2.2创建应用
    • 2.3下载sdk
    • 2.4引入sdK
  3. 调用有界面接口
    • 3.1效果图
    • 3.2配置AndroidManifest.xml
    • 3.3添加代码
  4. 调用无界面接口
    • 4.1效果图
    • 4.2操作步骤
  5. 监听器(回调接口)
  6. 智能短信验证
    • 6.1使用智能验证
  7. 服务器短信服务
    • 7.1接口使用
  8. 错误码参考
    • 8.1本地错误码
    • 8.2服务器错误码
  9. 附加
    • 9.1权限修改
    • 9.2mob规则
  10. 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

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值