Mob实现短信验证码功能

1、各类第三方短信功能对比

1、一直想做一个Android短信验证码功能,但是由于业务上没有需求,还有就是短信验证码原来一直以为是收费的,就没做过,今天上网查了一下,好多第三方SDK。

网易云短信验证码地址:http://netease.im/sms(0.045元/条,12w条以上会更便宜)

聚合数据:https://www.juhe.cn/docs/api/id/54  (0.045元/条,10万条以上会有优惠)

荣联云通讯:https://www.yuntongxun.com/?ly=sem-baidu&qd=pc-dasou&cp=ppc&xl=null&kw=10236399 (最便宜的0.045元/条,平常都是0.06元/条,较贵)。

免费的mob:http://www.mob.com/(免费的,但是条数有限制,具体可查看下方SDK限制规则)

2、没办法,感觉自己还是默默集成mob吧,谁让人家是免费的呢。

2、Mob简介

Mob是一个多功能的移动开发平台,可以发送短信和Im通话等。在官方文档中说是发送短信完全免费的,不限条数,不限全球运营商,但是还是有一定的限制的。

官方说明如下:

SDK限制规则:

1、同一个应用下同一个手机号码30秒内只能一次发送请求,每分钟只能有2次发送请求。
2、同一个应用下每分钟只能有100次同类型短信(文本、语音、自定义内容短信)的发送请求(SDK + webApi)。
3、同一个手机号码24小时内只能发送10条文本验证码短信,10条语音短信,10条自定义短信。

所以对于大型应用,可能不太适合,但是一般中小型的应用应该是没问题的,毕竟每分钟也是可以有100条短信的。

3、Mob集成

(1)需要在网站注册后,进入后台,然后开通SMSSDK,如下图所示:

其实Mob集成起来非常简单,要比IM集成容易很多,可以参考官方网址:http://wiki.mob.com/sdk-sms-android-3-0-0/

只需要几步,几行代码就可以集成完毕,然后就是在Activity中写代码。官网中提供了两种方式,一种是自带UI的,只需一个send方法调用即可:

    fun sendCode() {
        val page = RegisterPage()
        //如果使用我们的ui,没有申请模板编号的情况下需传null
        page.setTempCode(null)
        page.setRegisterCallback(object : EventHandler() {
            override fun afterEvent(event: Int, result: Int, data: Any) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // 处理成功的结果
                    val phoneMap = data as HashMap<String, Any>
                    val country = phoneMap["country"] as String // 国家代码,如“86”
                    val phone = phoneMap["phone"] as String // 手机号码,如“13800138000”
                    // TODO 利用国家代码和手机号码进行后续的操作
                } else {
                    // TODO 处理错误的结果
                }
            }
        })
        page.show(this)
    }

4、自己写的xml界面

执行如下方法即可

    fun myCode() {
        // 在尝试读取通信录时以弹窗提示用户(可选功能)
        SMSSDK.setAskPermisionOnReadContact(true)
        eventHandler = object : EventHandler() {
            override fun afterEvent(event: Int, result: Int, data: Any?) {
                // afterEvent会在子线程被调用,因此如果后续有UI相关操作,需要将数据发送到UI线程
                val msg = Message()
                msg.arg1 = event
                msg.arg2 = result
                msg.obj = data
                Handler(Looper.getMainLooper(), Handler.Callback { msg ->
                    val event = msg.arg1
                    val result = msg.arg2
                    val data = msg.obj
                    if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        if (result == SMSSDK.RESULT_COMPLETE) {
                            // TODO 处理成功得到验证码的结果
                            showToastShort("获取验证码成功")
                            // 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达
                        } else {
                            // TODO 处理错误的结果
                            (data as Throwable).printStackTrace()
                        }
                    } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        if (result == SMSSDK.RESULT_COMPLETE) {
                            // TODO 处理验证码验证通过的结果
                            showToastShort("验证码验证通过")
                        } else {
                            // TODO 处理错误的结果
                            (data as Throwable).printStackTrace()
                        }
                    }
                    // TODO 其他接口的返回结果也类似,根据event判断当前数据属于哪个接口
                    false
                }).sendMessage(msg)
            }
        }
        // 提交验证码,其中的code表示验证码,如“1357”
        if(vertification_vode!!.text.toString()!=""){
            SMSSDK.submitVerificationCode("86", phone_id!!.text.toString(), vertification_vode!!.text.toString())
        }else{
            // 注册一个事件回调,用于处理SMSSDK接口请求的结果
            SMSSDK.registerEventHandler(eventHandler)
            // 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”
            SMSSDK.getVerificationCode("86", phone_id!!.text.toString())
        }
    }

    // 使用完EventHandler需注销,否则可能出现内存泄漏
    override fun onDestroy() {
        super.onDestroy()
        SMSSDK.unregisterEventHandler(eventHandler)
    }

5、编辑短信签名和模板

完成以后发送短信时,短信前方的括号会显示:[掌淘科技],如果想去掉则需要去官网的SMSSDK下设置“短信模板”,和“短信签名”来设置自己想发送的短信内容。

备注:在官网后台首页SMSSDK概览下方,需要把是否开启Mob云验证关闭,不然只能第一次发送成功,以后会成功,但是不会往手机发送验证码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值