一直想自己做點(diǎn)小玩意,有希望能夠用戶參與進(jìn)來蝴猪,于是乎就怎么都避不開注冊(cè)登錄這個(gè)環(huán)節(jié)调衰,人呢,比較懶自阱,就希望一步到位嚎莉,思前想后,決定不要注冊(cè)這步沛豌,直接采用短信驗(yàn)證碼的進(jìn)行登錄趋箩,這樣,既安全又簡(jiǎn)潔琼懊,當(dāng)然了阁簸,主要還是人懶;網(wǎng)上搜了很多的短信驗(yàn)證哼丈,都要收費(fèi)启妹,我哭,后來終于發(fā)現(xiàn)了http://www.mob.com/ 醉旦,提供免費(fèi)的短信驗(yàn)證碼功能饶米,使用該服務(wù)需要申請(qǐng)。測(cè)試期間短信條數(shù)限制:20條/天车胡,APP開發(fā)完成后務(wù)必提交到mob.com后臺(tái)審核檬输,開通完全免費(fèi)短信。多的我就不介紹了匈棘,省的大家以為是廣告貼丧慈,下面我就說說我的集成過程吧:
申請(qǐng)賬號(hào),創(chuàng)建應(yīng)用主卫,獲取APP KEY 和 APP Secret
下載SDK逃默,獲取相應(yīng)的aar包
將SDK中的MobCommons.jar,MobTools.jar,SMSSDK-2.0.1.aar,SMSSDKGUI-2.0.1.aar放到了app的libs目錄下。然后在app目錄下的build.gradle簇搅,添加以下代碼:
repositories {
flatDir {
dirs 'libs' //就是你放aar的目錄地址
}
}
dependencies {
compile name:'SMSSDK-2.1.3',ext:'aar'
}
初始化
SMSSDK.initSDK(this, "您的appkey", "您的appsecret")
發(fā)送驗(yàn)證碼
SMSSDK.getVerificationCode(getString(R.string.phone_region), tel)
這里是直接調(diào)用發(fā)送短信驗(yàn)證碼的接口完域,并沒有使用內(nèi)置的開源GUI功能
驗(yàn)證短信驗(yàn)證碼
SMSSDK.submitVerificationCode(getString(R.string.phone_region), tel, code)
短信操作回調(diào)
SMSSDK.registerEventHandler(eh)
val eh: EventHandler = object : EventHandler() {
override fun afterEvent(event: Int, result: Int, data: Any) {
if (result == SMSSDK.RESULT_COMPLETE) {
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
runOnUiThread {
toast("驗(yàn)證碼已發(fā)送")
}
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//獲取驗(yàn)證碼成功
Preference.token = telEt.text.toString()
startActivity<MainActivity>()
finish()
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持發(fā)送驗(yàn)證碼的國家列表
}
} else {
//(data as Throwable).printStackTrace()
runOnUiThread {
toast("驗(yàn)證碼錯(cuò)誤")
}
}
}
}
最后所有代碼如下:
package com.vslimit.concise.activity
import android.os.Bundle
import android.text.TextUtils
import cn.smssdk.EventHandler
import cn.smssdk.SMSSDK
import com.vslimit.concise.R
import com.vslimit.concise.ui.TimerCount
import com.vslimit.concise.utils.Preference
import kotlinx.android.synthetic.main.activity_login.*
import org.jetbrains.anko.onClick
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.toast
/**
* Created by vslimit on 16/2/10.
*/
class LoginActivity : BaseActivity() {
override val layoutResourceId: Int = R.layout.activity_login
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sendBtn.onClick { attemptSend() }
loginBtn.onClick {
login()
}
SMSSDK.initSDK(this, "您的appkey", "您的appsecret")
SMSSDK.registerEventHandler(eh)
}
val eh: EventHandler = object : EventHandler() {
override fun afterEvent(event: Int, result: Int, data: Any) {
if (result == SMSSDK.RESULT_COMPLETE) {
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
runOnUiThread {
toast("驗(yàn)證碼已發(fā)送")
}
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//獲取驗(yàn)證碼成功
Preference.token = telEt.text.toString()
startActivity<MainActivity>()
finish()
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持發(fā)送驗(yàn)證碼的國家列表
}
} else {
//(data as Throwable).printStackTrace()
runOnUiThread {
toast("驗(yàn)證碼錯(cuò)誤")
}
}
}
}
fun attemptSend() {
val tel = telEt.text.toString()
if (TextUtils.isEmpty(tel)) {
toast("手機(jī)號(hào)碼不能為空")
} else {
val timeCount: TimerCount = TimerCount(60000, 1000, sendBtn)
timeCount.start()
SMSSDK.getVerificationCode(getString(R.string.phone_region), tel)
}
}
fun login() {
val tel = telEt.text.toString()
val code = codeEt.text.toString()
if (TextUtils.isEmpty(tel)) {
toast("手機(jī)號(hào)碼不能為空")
} else if (TextUtils.isEmpty(code)) {
toast("驗(yàn)證碼不能為空")
} else {
SMSSDK.submitVerificationCode(getString(R.string.phone_region), tel, code)
}
}
override fun onDestroy() {
super.onDestroy()
SMSSDK.unregisterEventHandler(eh)
}
}
這樣,我們就在Android端實(shí)現(xiàn)了發(fā)送驗(yàn)證碼和校驗(yàn)驗(yàn)證碼瘩将,mob還提供了服務(wù)端校驗(yàn)驗(yàn)證碼和智能校驗(yàn)驗(yàn)證碼的功能吟税,不過一事不煩二主凹耙,都在app中搞定。