团队项目——第一阶段冲刺2
一、前言
昨天 |
1、环境搭建 2、明确任务详情 3、简单爱好界面设计 |
今天 |
1、优化爱好界面 2、实现验证码发送 |
遇到的问题 |
1、手机无法接受到短信(忘记在manifest中开启注册接收和读取短信的权限) 2、界面UI设计不够美观 |
二、设计思路
为了简化开发难度,我们团队统一采用 MobTech 来获取验证码登录。想要具体了解可参考 MobTech 的 文档。
配置
1、在buildscrip–>dependencies 模块下面添加
dependencies { classpath 'com.android.tools.build:gradle:3.6.2' classpath "com.mob.sdk:MobSDK:2018.0319.1724" }
2、在使用SMSSDK模块的build.gradle中,添加MobSDK插件和扩展
// 添加插件 apply plugin: 'com.mob.sdk' // 在MobSDK的扩展中注册SMSSDK的相关信息 MobSDK { appKey "申请Mob的appkey" appSecret "申请Mob的AppSecret" SMSSDK {} }
3、开启权限(非常重要)
<!-- 可选权限说明--> <uses-permission android:name="android.permission.INTERNET" /> <!--允许应用程序联网(必须)--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允许访问WiFi网络状态信息(必须)--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--允许读取手机状态(必须)--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允许访问网络状态(必须)--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许写手机存储(必须)--> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <!--GUI自动填充验证码功能(非必须)--> <uses-permission android:name="android.permission.READ_SMS" /> <!--从短信中读取验证码接口(非必须)--> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!--应用内好友功能(非必须)-->
功能代码
MainActivity.java
public class MainActivity extends AppCompatActivity { private Button buttonCode, buttonLogin; private EditText editTextPhoneNum, editTextCode; private String phoneNum, code; private EventHandler eh; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonCode = findViewById(R.id.buttonCode); buttonLogin = findViewById(R.id.buttonLogin); editTextCode = findViewById(R.id.editTextCode); editTextPhoneNum = findViewById(R.id.editTextPhoneNum); eh = new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { if (result == SMSSDK.RESULT_COMPLETE) { //回调完成 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码成功 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); } }); } else if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "语音验证发送", Toast.LENGTH_SHORT).show(); } }); } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { //获取验证码成功 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "验证码已发送", Toast.LENGTH_SHORT).show(); } }); } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) { Log.i("test", "test"); } } else { ((Throwable) data).printStackTrace(); Throwable throwable = (Throwable) data; throwable.printStackTrace(); Log.i("1234", throwable.toString()); try { JSONObject obj = new JSONObject(Objects.requireNonNull(throwable.getMessage())); final String des = obj.optString("detail"); if (!TextUtils.isEmpty(des)) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, des, Toast.LENGTH_SHORT).show(); } }); } } catch (JSONException e) { e.printStackTrace(); } } } }; //注册一个事件回调监听,用于处理SMSSDK接口请求的结果 SMSSDK.registerEventHandler(eh); buttonCode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { phoneNum = editTextPhoneNum.getText().toString(); if (!phoneNum.isEmpty()) { //利用正则表达式获取检验手机号 if (Utils.checkTel(phoneNum)) { //获取验证码 SMSSDK.getVerificationCode("86", phoneNum); } else { Toast.makeText(getApplicationContext(), "请输入有效的手机号", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(getApplicationContext(), "请输入手机号", Toast.LENGTH_LONG).show(); return; } phoneNum = editTextPhoneNum.getText().toString(); } }); buttonLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { code = editTextCode.getText().toString(); if (!code.isEmpty()) { //提交验证码 SMSSDK.submitVerificationCode("86", phoneNum, code); } else { Toast.makeText(getApplicationContext(), "请输入验证码", Toast.LENGTH_LONG).show(); } } }); } //使用完EventHandler需注销,否则可能出现内存泄漏 @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eh); } }
- 获取验证码,如果未输入手机号或者手机号不符合规则,会提示信息
- 如果手机号符合,则调用 java SMSSDK.getVerificationCode(country, phone); 来获得手机验证码(请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”)
- 当收到验证码时调用 java SMSSDK.submitVerificationCode(country, phone, code); 来进行校验
手机号校验
public class Utils { /** * 正则匹配手机号码 */ public static boolean checkTel(String tel){ Pattern p = Pattern.compile("^[1][3,4,5,7,8,9][0-9]{9}$"); Matcher matcher = p.matcher(tel); return matcher.matches(); } }