短信验证码的实现--基于Mob3.0 SMS SDK + Android Studio 2.3.3
来源:互联网 发布:童装网络营销策划书 编辑:程序博客网 时间:2024/06/05 17:38
前言:
1. Mob的官方文档有点迷人,但是,终于还是解决了。 特此总结,帮助下学习Android的兄弟们。2. 那个AppKey的获取很简单,我这里没记录,老铁们自己去Mob官网注册下就可以了,而且,网上教程也很多。
1.环境配置
1.1 获取Mob SMS SDK
请至Mob官网下载最新SDK,解压后会看到以下目录结构:
SMSSDK下存放的是短信SDK的全部内容。
1.2 导入SDK
SMSSDK目录下包含以下内容:
将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面:
在Module的build.gradle里面修改两处代码:
repositories{ flatDir{ dirs 'libs' //就是你放aar的目录地址 }}
dependencies { ....//你的其他依赖 compile name:'SMSSDK-<version>',ext:'aar' compile name:'SMSSDKGUI-<version>',ext:'aar'}
最终如图所示:
2. 功能实现
2.1 配置AndroidManifest.xml
2.1.1、添加以下权限:
<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" />
2.1.2、添加以下Activity:
<activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize"/>
2.1.3、在Application节点下添加以下属性:
android:name="com.mob.MobApplication"
2.1.4、在Application节点下添加以下meta-data:
<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data --><meta-data android:name="Mob-AppKey" android:value="你的AppKey"/><meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
完成后,如图所示:
3. 代码示例
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "SmsYanzheng"; EditText mEditTextPhoneNumber; EditText mEditTextCode; Button mButtonGetCode; Button mButtonLogin; EventHandler eventHandler; String strPhoneNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditTextPhoneNumber = (EditText) findViewById(R.id.phone_number); mEditTextCode = (EditText) findViewById(R.id.verification_code); mButtonGetCode = (Button) findViewById(R.id.button_send_verification_code); mButtonLogin = (Button) findViewById(R.id.button_login); mButtonGetCode.setOnClickListener(this); mButtonLogin.setOnClickListener(this); eventHandler = new EventHandler() { /** * 在操作之后被触发 * * @param event 参数1 * @param result 参数2 SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败 * @param data 事件操作的结果 */ @Override public void afterEvent(int event, int result, Object data) { Message message = myHandler.obtainMessage(0x00); message.arg1 = event; message.arg2 = result; message.obj = data; myHandler.sendMessage(message); } }; SMSSDK.registerEventHandler(eventHandler); } @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eventHandler); } @Override public void onClick(View view) { if (view.getId() == R.id.button_login) { String strCode = mEditTextCode.getText().toString(); if (null != strCode && strCode.length() == 4) { Log.d(TAG, mEditTextCode.getText().toString()); SMSSDK.submitVerificationCode("86", strPhoneNumber, mEditTextCode.getText().toString()); } else { Toast.makeText(this, "密码长度不正确", Toast.LENGTH_SHORT).show(); } } else if (view.getId() == R.id.button_send_verification_code) { //发送验证码button触发的事件 strPhoneNumber = mEditTextPhoneNumber.getText().toString(); if (null == strPhoneNumber || "".equals(strPhoneNumber) || strPhoneNumber.length() != 11) { Toast.makeText(this, "电话号码输入有误", Toast.LENGTH_SHORT).show(); return; } //如果电话号码正确,那么调用发送验证码的接口 SMSSDK.getVerificationCode("86", strPhoneNumber); mButtonGetCode.setClickable(false); //开启线程去更新button的text new Thread() { @Override public void run() { int totalTime = 60; for (int i = 0; i < totalTime; i++) { Message message = myHandler.obtainMessage(0x01); message.arg1 = totalTime - i; myHandler.sendMessage(message); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } myHandler.sendEmptyMessage(0x02); } }.start(); } } Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0x00: int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; Log.e(TAG, "result : " + result + ", event: " + event + ", data : " + data); if (result == SMSSDK.RESULT_COMPLETE) { //回调 当返回的结果是complete //获取验证码 Toast.makeText(MainActivity.this, "发送验证码成功", Toast.LENGTH_SHORT).show(); Log.d(TAG, "get verification code successful."); } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码 Log.d(TAG, "submit code successful"); Toast.makeText(MainActivity.this, "提交验证码成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this, SencondActivity.class); startActivity(intent); } else { Log.d(TAG, data.toString()); } } else { //进行操作出错,通过下面的信息区分析错误原因 try { Throwable throwable = (Throwable) data; throwable.printStackTrace(); JSONObject object = new JSONObject(throwable.getMessage()); String des = object.optString("detail");//错误描述 int status = object.optInt("status");//错误代码 //错误代码: http://wiki.mob.com/android-api-%E9%94%99%E8%AF%AF%E7%A0%81%E5%8F%82%E8%80%83/ Log.e(TAG, "status: " + status + ", detail: " + des); if (status > 0 && !TextUtils.isEmpty(des)) { Toast.makeText(MainActivity.this, des, Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { e.printStackTrace(); } } break; case 0x01: mButtonGetCode.setText("重新发送(" + msg.arg1 + ")"); break; case 0x02: mButtonGetCode.setText("获取验证码"); mButtonGetCode.setClickable(true); break; } } };}
4. 总结
现在回过头来看短信验证码的实现,真的是很简单。
但是,身陷Mob的官方那迷人的Demo和开发文档时,内心却是崩溃的。
于是,自己总结了完整的流程,如上,希望能帮助到有短信验证码需求的兄弟。
完整项目等下上传,这几天学习学的积分都没了,希望大佬们能给点积分哦。
有积分的老铁们戳:
阅读全文
0 0
- 短信验证码的实现--基于Mob3.0 SMS SDK + Android Studio 2.3.3
- Android 短信验证 Mob3.0
- Android集成Mob3.0.0短信验证功能SMSSDK For Android
- Android短信验证码mob,SMS的使用
- android 短信sms 接入,实现短信验证注册功能
- 短信验证的实现(基于云之讯短信验证SDK)
- Android下实现短信SMS的收发
- 基于SMSSDK的Android studio 的短信验证
- Android实现登录系统(二)--SMS短信验证登录
- Android短信验证码SDK
- java实现SMS短信平台发送验证码功能
- Android studio如何实现短信验证
- SMS(短信)-J2ME的实现
- android 短信验证码的实现
- laravel5.4使用Laravel Sms和阿里云短信服务实现短信验证码功能
- 短信验证码(SMS verification)是什么
- Android——实现像handcent sms或者chomp sms那样的气泡短信样式
- Android studio 下使用mob的短信验证码SMSSDK
- SAP Contract合同类型的使用
- <转载改编>windows下使用log4j将Tomcat console中的日志存储到文件中
- 【web前端】js json转数组,数组转json,字符串转数字
- disruptor 并发编程
- 验证
- 短信验证码的实现--基于Mob3.0 SMS SDK + Android Studio 2.3.3
- 三、缓冲输入输出
- CSS margin 属性
- python进程间通信
- 深入理解 Session 与 Cookie
- 算法系列(三)插入排序的两种改进:规避边界检测和取消交换(Java实现)
- UE4中灯光和天空大气的设置说明
- HTTP协议
- 海量数据处理面试题(1) 找出两文件种包含的相同的url