本文為菜鳥窩作者劉婷的連載。”商城項目實戰”系列來聊聊仿”京東淘寶的購物商城”如何實現。
還記得上篇文章《商城項目實戰 | 21.1 自定義帶清除功能的 EditText》所涉及到的登錄模塊嗎?先來看下登錄的界面如下所示。

登錄的界面大家再熟悉不過了,輸入手機號碼和密碼,然后登錄,如果沒有賬號的話,就要點擊左下角的“注冊”了,注冊方式一般情況下是手機號獲取驗證碼,然后驗證成功,設置密碼的流程,在商城項目中的注冊模塊中,采用的也是這種方式,那么如何實現獲取到短信驗證碼實現驗證呢?
集成 Mob 短信 SDK
實現短信驗證碼驗證的方式有很多種,這里要介紹的是集成 Mob 官網的短信 SDK,之前的文章《商城項目實戰 | 20.1 ShareSDK 實現商品分享》中也介紹了 Mob 官網的分享 SDK 的集成來實現商品分享的功能,Mob 的一些工具也確實是比較好用。
1. Mob 短信 SDK 的優點
為什么商城項目中使用的是 Mob 官方的短信 SDK 呢?主要的原因如下。
(1)流程簡單,集成后直接用戶輸入手機號,然后獲取短信驗證碼,最后校驗驗證碼就搞定了。
(2)功能比較強大,擁有傳統的獲取驗證碼方式以及語言驗證的方式,同時還可以自定義簽名。
(3)速度快,獲取到驗證碼的速度很快,對于用戶體驗也會提升不少。
(4)配置簡單,對于開發者而言不需要太復雜的邏輯。
(5)可以自定義 UI。
(6)全面的數據統計。
(7)完全免費,并且開源。
鑒于 Mob 的短信 SDK 的優勢,所以在商城項目就使用配置該短信 SDK 來實現注冊短信驗證的功能,下面繼續看如何進行集成配置。
2. 下載 SDK
進入到 Mob 官網,然后找到 SDK 下載中的 SMS for Android,就可以進入到短信 SDK 的下載頁面,有 Android Studio 和 Eclipse 兩種,這里我們要的是 Android Studio 版本的。

下載完成后得到 SDK 的壓縮包,解壓獲取到這些文件。

其中 ApiDoc 是包含了 SDK 的相關 API 文檔,SMSSDK 文件中則是短信 SDK 相關的 jar 包和 aar 包,其他的就是實例 Demo 、用戶指南等 URL 快捷方式。
3. 集成配置短信 SDK
使用 Android Studio 工具時,配置短信 SDK 就是要在 build.gradle 中集成 SDK,當然首先要把下載到本地的 jar 包和 aar 包復制到新建的工程 libs 目錄下,先來看下有哪些要使用到的 jar 包和 aar 包。

MobCommons.jar 為通用公共庫,是必須要的,MobTools.jar 為工具公共庫,也是必須的,SMSSDK-2.1.4.aar 則是 SMSSDK 核心庫,必須要的,SMSSDKGUI-2.1.4.aar 是 SMSSDK GUI 開源庫,沒有必要一定要使用,可以自定義 UI。
把需要的包復制到 libs 目錄下之后,開始配置 build.gradle 文件。
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
compile files('libs/MobTools-2017.0412.1554.jar')
compile (name:'SMSSDK-2.1.4',ext:'aar')
compile (name:'SMSSDKGUI-2.1.4',ext:'aar')
compile files('libs/MobCommons-2017.0321.1624.jar')
}
添加對包的依賴,但是因為這里還涉及了 aar 的依賴配置,所以還需要在 build.gradle 文件添加對 aar 的配置。
repositories{
flatDir{
dirs 'libs' //就是你放aar的目錄地址
}
}
4. 添加后臺應用
在 Mob 官網上面有個“進入后臺”的模塊,進入后選擇短信 SDK ,然后使用,開始添加自己的應用,填寫基本的信息。

完成之后,就可以獲取到對應的 APP Key 和 APP Secret,這在后面的工程中使用短信功能時需要用到。

到這里短信 SDK 的集成就完成了,下面就要在工程開始使用。
**配置 AndroidManifest.xml **
在工程的 AndroidManifest.xml 文件中添加權限。
<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" />
之后在 AndroidManifest.xml 文件中還要添加對于 Activity 之 MobUIShell 的配置。
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
這是 Mob 公共庫中的 UI 界面相關的 Activity。
實現短信驗證功能
1. 啟動短信 SDK 功能
所謂啟動短信 SDK 功能,也就是對短信 SDK 進行初始化。
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
上文中已經介紹了如何獲取 App Key 和 App Secret,而在工程中初始化時就要使用到 App Key 和 App Secret。
2. 發送短信驗證碼
短信 SDK 已經內置了開源的 GUI 功能,可以直接通過調用下面的代碼打開短信驗證頁面。
//打開注冊頁面
RegisterPage registerPage = new RegisterPage();
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");
// 提交用戶信息(此方法可以不調用)
registerUser(country, phone);
}
}
});
registerPage.show(context);
其中 EventHandler 是短信 SDK 的操作回調,對于獲取驗證碼是否成功后的操作處理就寫在這里面。
3. 效果圖
運行代碼,獲取效果圖。

點擊下一步獲取驗證碼,然后接收驗證碼,進行驗證就可以了。
如何集成 Android 短信 SDK 實現短信驗證就介紹到這里了,更多的可以參考 Mob 官方 Demo。
免費學習RxJava2,Dagger2,Retrofit2 ,OkHttp3 等熱門課程
關注公眾號免費領取"140套優秀開源項目源碼"
菜鳥窩-程序猿的黃埔軍校。 如需轉載,請注明出處(菜鳥窩 , 原文鏈接:http://www.cniao5.com/forum/thread/8fa6f4e84a5911e7888d00163e0230fa