又有半个月没更新文章了,最近工作比较忙,一时没时间写,今天趁着清闲,赶紧补上一篇。。。。。
今天就说一下 Android集成短信验证功能的实现,最常见的短信验证界面我们都知道,两个输入框(输入手机号,输入验证码),两个按钮(获取验证码,提交),非常简单,唯一需要多写几行代码的地方就是那个获取验证码的按钮,为防止获取验证码的操作过于频繁,需要做出必要的限制,最常见的就是60s了,关于60s的问题,可以参见 Android -- 倒计时Button的几种实现 ,在这里我们重点说一下验证功能。
首先今天我们要说的主角就是它了—— Mob,什么?黑手党??暴徒???
NO,NO,NO,绝壁没有那么diao, 它是 Mob移动开发者服务平台 ,绝对的良民
好了,不说废话了。开整。。。。
1、首先需要下载SDK
我这里下的是,
基于AS开发平台的,也有eclipse的,不过现在基本上都在用Google亲儿子,eclipse已经被大多数android开发者抛弃了,现在想想还(曾)有(经)一(被)点(虐)小(千)怀(百)念(遍)。
2、解压下载的压缩文件
主要用到里面的这几个jar包
3、将这四个玩意儿放到项目的libs目录下
4、在app目录下的build.gradle中加上如下图所示代码
好了,集成的工作就做好了,没错,就是这么简单,接下来就是代码了。
package com.hbh.cl.smsvalidatedemo;import android.app.application;import cn.smssdk.SMSSDK;/** * Created by hbh. */public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SMSSDK.initSDK(this, "你的appkey", "你的appsecret"); }}至于appkey和appsecret可以在注册用户后在个人中心查看,如下登录页面
package com.hbh.cl.smsvalidatedemo;import android.content.Intent;import android.os.Bundle;import android.os.CountDownTimer;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.util.regex.Matcher;import java.util.regex.Pattern;import cn.smssdk.EventHandler;import cn.smssdk.SMSSDK;/** * Created by hbh */public class LoginActivity extends AppCompatActivity implements View.OnClickListener { PRivate Button validateNum_btn; private Button landing_btn; private EditText userName; private EditText validateNum; public EventHandler eh; //事件接收器 private TimeCount mTimeCount;//计时器 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); initEvent(); init(); } private void initEvent(){ userName = (EditText) findViewById(R.id.userName); validateNum = (EditText) findViewById(R.id.validateNum); validateNum_btn = (Button) findViewById(R.id.validateNum_btn); landing_btn = (Button) findViewById(R.id.landing_btn); validateNum_btn.setOnClickListener(this); landing_btn.setOnClickListener(this); mTimeCount = new TimeCount(60000, 1000); } /** * 初始化事件接收器 */ private void init(){ 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) { //提交验证码成功 startActivity(new Intent(LoginActivity.this, MainActivity.class)); //页面跳转 }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //获取验证码成功 }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持发送验证码的国家列表 } }else{ ((Throwable)data).printStackTrace(); } } }; SMSSDK.registerEventHandler(eh); //注册短信回调 } @Override public void onClick(View view) { switch (view.getId()){ case R.id.validateNum_btn:// SMSSDK.getSupportedCountries();//获取短信目前支持的国家列表 if(!userName.getText().toString().trim().equals("")){ if (checkTel(userName.getText().toString().trim())) { SMSSDK.getVerificationCode("+86",userName.getText().toString());//获取验证码 mTimeCount.start(); }else{ Toast.makeText(LoginActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(LoginActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show(); } break; case R.id.landing_btn: if (!userName.getText().toString().trim().equals("")) { if (checkTel(userName.getText().toString().trim())) { if (!validateNum.getText().toString().trim().equals("")) { SMSSDK.submitVerificationCode("+86",userName.getText().toString().trim(),validateNum.getText().toString().trim());//提交验证 }else{ Toast.makeText(LoginActivity.this, "请输入验证码", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(LoginActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(LoginActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show(); } break; } } /** * 正则匹配手机号码 * @param tel * @return */ public boolean checkTel(String tel){ Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$"); Matcher matcher = p.matcher(tel); return matcher.matches(); } @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eh); } /** * 计时器 */ class TimeCount extends CountDownTimer{ public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long l) { validateNum_btn.setClickable(false); validateNum_btn.setText(l/1000 + "秒后重新获取"); } @Override public void onFinish() { validateNum_btn.setClickable(true); validateNum_btn.setText("获取验证码"); } }}对应的xml文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:gravity="center" android:orientation="vertical"> <EditText android:id="@+id/userName" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="@drawable/shape_style" android:hint="@string/tel" android:textColorHint="@color/gray" android:layout_gravity="center_vertical" android:singleLine="true" android:textSize="16sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp"> <EditText android:id="@+id/validateNum" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:padding="10dp" android:background="@drawable/shape_style" android:hint="@string/validate" android:textColorHint="@color/gray" android:layout_gravity="center_vertical" android:layout_marginRight="10dp" android:singleLine="true" android:textSize="16sp" /> <Button android:id="@+id/validateNum_btn" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="@string/validateNum"/> </LinearLayout> <Button android:id="@+id/landing_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="@string/landing"/></LinearLayout>最后在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" /> 好了,IT'S ALL OVER. 就是那么简单,代码基本上全都贴上了,样子就是这个样子,demo丑了点。
还有一些其他的相关功能大家可以自己去看Mob的官方文档。筒子们,再见
新闻热点
疑难解答