本文为菜鸟窝作者刘婷的连载。”商城项目实战”系列来聊聊仿”京东淘宝的购物商城”如何实现。
还记得上篇文章《商城项目实战 | 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