Android實現(xiàn)短信驗證功能的代碼
在我們現(xiàn)在開發(fā)APP過程中,當(dāng)用戶注冊時,短信驗證是必不可少的操作,這里我們就是用一個免費的第三方短信驗證SDK-MOP
首先看下效果圖
獲取AppKey和AppSecret
首先進入官網(wǎng),登錄(沒有帳號的自己去注冊一個)。鼠標(biāo)移動到右側(cè)頭像處,點擊進入后臺。
官網(wǎng)首頁
選擇SecurityCodeSDK。
選擇短信SDK
進入后臺頁面后,點擊添加按鈕、填寫應(yīng)用名稱(這個可以隨便寫)、選擇Android后,點擊添加即可。
添加應(yīng)用
添加成功后,就會進入以下界面,在這里就可以看到剛剛申請成功的App Key和App Secret
下載SDK
下載SDK
官方文檔
這里我們選擇AndroidStudio版本
下載之后解壓,有一個SMSSDK文件夾 里面有4個包 ,把他們放到我們項目的libs下
之后打開app下的buildgradle,按照下面的圖進行操作
這是AndroidStudio代碼
repositories{ flatDir{ dirs 'libs' }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile name:'SMSSDK-2.1.1',ext:'aar' compile name:'SMSSDKGUI-2.1.1',ext:'aar' compile 'com.android.support:appcompat-v7:23.3.0'}
配置AndroidManifest.xml
加權(quán)限
<uses-permission android:name="android.permission.READ_CONTACTS" /> <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" />
然后打“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"/>
使用SMSSDK發(fā)送短信驗證碼,并驗證
核心方法
1.初始化SDK,單例,可以多次調(diào)用;任何方法調(diào)用前,必須先初始化
initSDK(Context context, String appkey, String appSecrect)
2.注冊回調(diào)接口
registerEventHandler(EventHandler handler)
3.注銷回調(diào)接口
unregisterEventHandler(EventHandler handler)
4.接收回調(diào)的類
EventHandler
initSDK方法是短信SDK的入口,需要傳遞您從ShareSDK應(yīng)用管理后臺中注冊的應(yīng)用AppKey和AppSecrete,如果填寫錯誤,后續(xù)的操作都將不能進行。registerEventHandler用來往SMSSDK中注冊一個事件接收器,SMSSDK允許開發(fā)者注冊任意數(shù)量的接收器,所有接收器都會在事件 被觸發(fā)時收到消息。
registerEventHandler必須和unregisterEventHandler配套使用,否則可能造成內(nèi)存泄漏。
5.獲取短信目前支持的國家列表,在監(jiān)聽中返回
getSupportedCountries()
6.請求獲取短信驗證碼,在監(jiān)聽中返回
getVerificationCode(String country, String phone)
7.提交短信驗證碼,在監(jiān)聽中返回
submitVerificationCode(String country, String phone, String code)
getVerificationCode用于向服務(wù)器請求發(fā)送驗證碼的服務(wù),需要傳遞國家代號和接收驗證碼的手機號碼,支持此服務(wù)的國家代碼在 getSupportedCountries中獲取。請求getVerificationCode的時間間隔不應(yīng)該小于60秒,否則服務(wù)端會返回“操作過 于頻繁”的錯誤 submitVerificationCode用于向服務(wù)器提交接收到的短信驗證碼,驗證成功后會通過EventHandler返回國家代碼和電話號碼。
具體實現(xiàn)步驟
初始化SDK。
// 填寫從短信SDK應(yīng)用后臺注冊得到的APPKEY
private static String APPKEY = "154e3e410abc3";
// 填寫從短信SDK應(yīng)用后臺注冊得到的APPSECRET
private static String APPSECRET = "05713446f9786e2ad096c46fd4735dfe";SMSSDK.initSDK(context, APPKEY, APPSECRET);
聲明EventHandler。(獲取驗證碼成功、提交驗證碼成功等回調(diào)都在EventHandler中實現(xiàn))
EventHandler eh=new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { if (result == SMSSDK.RESULT_COMPLETE) { //回調(diào)完成 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交驗證碼成功 Log.i("EventHandler", "提交驗證碼成功"); }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //獲取驗證碼成功 Log.i("EventHandler", "獲取驗證碼成功"); }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持發(fā)送驗證碼的國家列表 Log.i("EventHandler", "返回支持發(fā)送驗證碼的國家列表"); } }else{ ((Throwable)data).printStackTrace(); Log.i("EventHandler", "回調(diào)失敗"); } } };
這里需要注意一下:afterEvent()并不在主線程中,因此回調(diào)完成的時候不能在afterEvent()中執(zhí)行更新UI,若需要執(zhí)行UI操作請使用Handler。
注冊短信回調(diào)
SMSSDK.registerEventHandler(eh); //注冊短信回調(diào)
這樣就完成SDK的初始化和短信回調(diào)的注冊了,接下來只要調(diào)用發(fā)送短信和驗證驗證碼的接口就行了
銷毀回調(diào)監(jiān)聽接口
SMSSDK.unregisterAllEventHandler();
打開注冊界面
// 打開注冊頁面 RegisterPage registerPage = new RegisterPage(); registerPage.setRegisterCallback(new EventHandler() { public void afterEvent(int event, int result, Object data) { // 解析注冊結(jié)果 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"); // 提交用戶信息 registerUser(country, phone); } } }); registerPage.show(this);
這樣就完成了簡單的短信驗證了
PS:
把項目上傳到Github上了,附上地址
以上所述是小編給大家介紹的Android實現(xiàn)短信驗證功能的代碼的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解如何在Android Studio中添加RecyclerView-v7支持包
本篇文章主要介紹了詳解如何在Android Studio中添加RecyclerView-v7支持包,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02Android開發(fā)技巧之ViewStub控件惰性裝載
布局文件中的控件并不一定在程序啟動時全都用到,有一些控件只在特定的情況下才會被使用到;我們急需一種機制來改變<include>標(biāo)簽的這種行為,只在需要時裝載控件。這種機制就是本節(jié)要介紹的ViewStub控件2013-01-01詳解Android 8.1.0 Service 中 彈出 Dialog的方法
這篇文章主要介紹了Android 8.1.0 Service 中怎么彈出 Dialog問題,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10Android實現(xiàn)微信自動向附近的人打招呼(AccessibilityService)
這篇文章主要為大家詳細(xì)介紹了實現(xiàn)微信自動向附近的人打招呼,實現(xiàn)收到指定賬戶推送文章時自動進入微信打開鏈接,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12詳解Android使用Html.fromHtml需要注意的地方
本篇文章主要介紹了詳解Android使用Html.fromHtml需要注意的地方,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07Flutter中實現(xiàn)交互式Webview的方法詳解
Flutter是一款強大的跨平臺移動應(yīng)用開發(fā)框架,而Webview則是在應(yīng)用中展示W(wǎng)eb內(nèi)容的重要組件,本文將介紹如何在Flutter應(yīng)用中實現(xiàn)交互式的Webview,快跟隨小編一起學(xué)習(xí)一下吧2023-09-09