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云验证关闭,不然只能第一次发送成功,以后会成功,但是不会往手机发送验证码了。